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