统计1到N的整数中1出现的次数
2015-08-28
次访问
剑指offer面试题系列
题目:输入一个整数,求从1到n个整数的十进制表示中 1 出现的次数。例如输入 12,则 1 一共出现了 5 次。
思路
https://github.com/ldfaiztt/algorithms-3/blob/master/interviewOffer/32.md
代码
package com.ans;
//判断从 1 到 N 的整数中 1 出现的次数
public class Solution1 {
public static int OneTimes(int num) {
int cur;//当前所指的位上的数字
int left;//当前位左边的数字
int right;//当前位右边的数字
int i = 0;
int times = 0;
while (num / power(i) != 0) {
left = num / power(i + 1);
cur = (num % power(i + 1)) / power(i);
right = num % power(i);
if (cur == 0) {
times += left * power(i);
}
if (cur == 1) {
times += left * power(i) + right + 1;
} else {
times += (left + 1) * power(i);
}
i++;
}
return times;
}
public static int power(int num) { // 用来移动指针
int retVal = 1;
while (num != 0) {
retVal *= 10;
num--;
}
return retVal;
}
public static void main(String[] args) {
System.out.println(OneTimes(21345));
}
}