32. 整数中 1 出现的个数
题目描述
求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。
思路一:
思路二:
从 1 - n, 分别统计每个数中1的个数
1 public class Solution { 2 public int NumberOf1Between1AndN_Solution(int n) { 3 // dp[i]表示 从 1 - i中所有数 中 1 的个数 4 // dp[i] + cnt; // cnt 表示当前数中1的个数 5 // 统计每个数中1的个数,右移一位,连续31次右移 6 7 int count = 0; 8 for(int i = 1; i <= n; i++){ 9 // 统计每个数中1的个数,右移一位,连续31次右移 10 int tmp = i; 11 while(tmp != 0){ 12 count += (tmp % 10 == 1) ? 1 : 0; 13 tmp /= 10; 14 } 15 } 16 return count; 17 } 18 }