跳转至

43.1 ~ n 整数中 1 出现的次数 (Medium)*

题目描述*

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

限制*

1 <= n < 2^31

代码*

肯定不能一个个数算,还是得找规律。

按位统计。

class Solution {
public:
    int countDigitOne(int n) {
        if(n <= 0) {
            return 0;
        }
        if(n < 10) {
            return 1;
        }
        string num = to_string(n);
        int last = stoi(num.substr(1));
        int power = pow(10, num.length() - 1);
        if(num[0] == '1') {
            return countDigitOne(last) + countDigitOne(power - 1) + last + 1;
        }else {
            return power + (num[0] - '0') * countDigitOne(power - 1) + countDigitOne(last);
        }
    }
};

最后更新: July 23, 2022