题目描述
求出 1 ∼ 13 1\sim13 1∼13的整数中 1 1 1出现的次数,并算出 100 ∼ 1300 100\sim1300 100∼1300的整数中1出现的次数?为此他特别数了一下 1 ∼ 13 1\sim13 1∼13中包含1的数字有 1 、 10 、 11 、 12 、 13 1、10、11、12、13 1、10、11、12、13因此共出现 6 6 6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从 1 1 1 到 n n n 中 1 1 1出现的次数)。
解题思路
- 当n小于1时,返回0。
- for循环从1到n,依次统计每个数中1的个数,最后返回总和。
代码实现
class Solution {
public:
int NumberOf1Between1AndN_Solution(int n)
{
if(n < 1)
return 0;
int count = 0;
for(int num = 1; num <= n; num++)
{
int temp = num; // 这里注意一下 不要直接用num 否则num的值会发生改变。
while(temp)
{
if(temp % 10 == 1)
count++;
temp /= 10;
}
}
return count;
}
};
其实本题目应该可以有递归的思路,不需要暴力求解,但是递归的思想应用到具体的这道题目上,确实有些复杂。
to be continued…