递归 求解,将数字转换为数组,deb表示当前是否允许0-9。
AC100%
class Solution {
public:
int countDigitOne(int n) {
vector<int> r;
do{
r.insert(r.begin(),n%10);
n/=10;
}while(n!=0);
return count(r,0,0,1);
}
int count(vector<int> &r,int i,int c,int deb){
if(i>r.size()){
return 0;
}
if(i==r.size()){
return c;
}
if(deb){
//0-r[i]
int sum = 0;
for(int j=0;j<=r[i];j++){
sum += count(r,i+1,c+(j==1),j==r[i]);
}
return sum;
}else{
//0-9
int sum = 0;
sum += count(r,i+1,c+1,0);
sum += 9*count(r,i+1,c,0);
return sum;
}
}
};