题目描述
求出1∼131\sim131∼13的整数中111出现的次数,并算出100∼1300100\sim1300100∼1300的整数中1出现的次数?为此他特别数了一下1∼131\sim131∼13中包含1的数字有1、10、11、12、131、10、11、12、131、10、11、12、13因此共出现666次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从111 到 nnn 中111出现的次数)。
解题思路
- 当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…
1到N中1出现的次数算法
本文探讨了一个有趣而实用的算法问题:求出指定范围内整数中特定数字出现的频率。以1到13为例,详细解析了如何统计数字1的出现次数,并进一步提出了解决更广泛范围(如100到1300)的方法。通过逐步分析,我们发现了一种高效算法,避免了暴力求解,为解决此类问题提供了新的视角。
2528

被折叠的 条评论
为什么被折叠?



