package cn.tiger.funny;
/**
* 1~n 整数中 1 出现的次数
* @author jyuan
*
输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。
例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。
示例 1:
输入:n = 12
输出:5
示例 2:
输入:n = 13
输出:6
限制:
1 <= n < 2^31
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/1nzheng-shu-zhong-1chu-xian-de-ci-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
*/
public class CountDigitOne {
public int countDigitOne(int n) {
long count = 0 ;
int mark = 1;
while (n/mark > 0) {
count += (n/mark>10)? n/(mark*10)*mark : 0; //防止超出int范围
int smallPart = (n/mark>10)? n%(mark*10) : n; //防止超出int范围
if (smallPart/mark == 0 ) {
// do nothing
} else if (smallPart/mark == 1) {
count += (smallPart%mark+1);
} else {
count += mark;
}
if(Integer.MAX_VALUE/mark>10) { //防止超出int范围
mark*=10;
} else {
break;
}
}
return (int)count;
}
public static void main(String[] args) {
CountDigitOne c = new CountDigitOne();
System.out.println(c.countDigitOne(1410065408));
}
}
![]()