题目描述
思路分析
数位dp的阉割版
只需要暴力枚举每一位上的1的出现次数就可以了。(基于尊重还是归类到dp吧)
有兴趣的可以看下
[
l
,
r
]
中
0
−
9
各
出
现
多
少
次
?
[l,r]中0-9各出现多少次?
[l,r]中0−9各出现多少次?这个问题
代码实现
class Solution {
public:
int countDigitOne(int n) {
vector<int> nums;
while(n) nums.push_back(n%10),n/=10;
reverse(nums.begin(),nums.end());
int res=0;
for(int i=0;i<nums.size();i++){
int cur=nums[i];
int l=0,r=0,k=1;
for(int j=0;j<i;j++) l=l*10+nums[j];
for(int j=i+1;j<nums.size();j++)r=r*10+nums[j],k*=10;
if(!cur) res+=l*k;
else if(cur==1) res+=l*k+r+1;
else res+=(l+1)*k;
}
return res;
}
};