题目描述

求出剑指offer 整数中1出现的次数(从1到n整数中1出现的次数)(C++)_for循环的整数中剑指offer 整数中1出现的次数(从1到n整数中1出现的次数)(C++)_算法_02出现的次数,并算出剑指offer 整数中1出现的次数(从1到n整数中1出现的次数)(C++)_递归_03的整数中1出现的次数?为此他特别数了一下剑指offer 整数中1出现的次数(从1到n整数中1出现的次数)(C++)_for循环中包含1的数字有剑指offer 整数中1出现的次数(从1到n整数中1出现的次数)(C++)_for循环_05因此共出现剑指offer 整数中1出现的次数(从1到n整数中1出现的次数)(C++)_代码实现_06次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从剑指offer 整数中1出现的次数(从1到n整数中1出现的次数)(C++)_算法_02剑指offer 整数中1出现的次数(从1到n整数中1出现的次数)(C++)_递归_08剑指offer 整数中1出现的次数(从1到n整数中1出现的次数)(C++)_算法_02出现的次数)。

解题思路

  • 当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…