题目描述:输入一个整数n,输出从1到n这n个十进制整数中1出现的次数。
思路1:不考虑时间效率的办法(不推荐),累加1到n中每个整数1出现的次数,可以通过每次对10求余来判断个位数是不是1,然后把数字除以10。这种算法时间复杂度比较高。
public class Solution {
public int NumberOf1Between1AndN_Solution(int n) {
if(n < 1){
return 0;
}
int number = 0;
for(int i = 1;i <= n;i++){
number += numberOf1(i);
}
return number;
}
public int numberOf1(int n){
int number = 0;
while(n >= 0){
if(n % 10==1){
number++;
}
n = n/10;
}
return number;
}
}
思路2:剑指offer书上推荐的,从数字规律上着手明显提高时间效率的解法: