从1到n整数中1出现的次数

136 阅读1分钟

从1到n整数中1出现的次数

输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。

例如输入12,从1到12这些整数中包含“1”的数字有1,10,11和12,其中“1”一共出现了5次。

样例
输入: 12
输出: 5

数学

时间复杂度O(logn)

class Solution {
  static public int numberOf1Between1AndN_Solution(final int n) {
    int sum = 0;
    int ab = n;
    int def = 0;
    int digit = 1;
    while (ab > 0) {
      final int c = ab % 10;
      ab /= 10;
      sum += ab * digit;
      if (c > 1) {
        sum += digit;
      } else if (c == 1) {
        sum += def + 1;
      }
      def += c * digit;
      digit *= 10;
    }
    return sum;
  }
}