233. 数字 1 的个数
模拟
class Solution {
public:
int getnum(string& str, int l, int r) {
int res = 0;
for (int i = l; i <= r; i++) {
res = res * 10 + str[i] - '0';
}
return res;
}
int countDigitOne(int n) {
string nums = to_string(n);
int res = 0, len = nums.size();
for (int i = 0; i < len; i++) {
if (i > 0) { // 如果枚举的是最高位,那么不考虑前半部分
res += getnum(nums, 0, i - 1) * pow(10, len - i - 1);
}
if (nums[i] == '1') res += getnum(nums, i + 1, len - 1) + 1;
else if (nums[i] > '1') res += pow(10, len - i - 1);
}
return res;
}
};
数位DP
…