- 题目描述
求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?(例如:1~13中包含1的数字有1、10、11、12、13因此共出现6次。)
- 思路
先求每个整数中1的个数,再求1~n中1的个数。
如:11
11%10得到个位数1
11/10得到十位数1
所以11中有两个1
- 代码
public class Solution {
public int NumberOf1Between1AndN_Solution(int n) {
if(n<1)
return 0;
int count=0;
for(int i=1;i<=n;i++){
count+=get1Num(i);
}
return count;
}
//得到一个数中1的个数
public int get1Num(int n){
//存储最后得到的1的个数
int ans=0;
while(n!=0){
if(n%10==1)
ans++;
n/=10;
}
return ans;
}
}
时间复杂度:十进制整数有logN位(以10为底),get1Num()函数是考察1个整数中含有多少个1,其代价为O(logN),所以考察N个整数中含有多少个1,时间复杂度为0(NlogN)。