class Solution {
public:
/*
int find_num1(int n){
int count = 0;
while(n){
if(n%10 == 1){
count++;
}
n /= 10;
}
return count;
}
//1-n中 1 出现的次数
int NumberOf1Between1AndN_Solution(int n) {
int cnt = 0;
for(int i = 1;i <= n;i++){
cnt += find_num1(i);
}
return cnt;
}
*/
int NumberOf1Between1AndN_Solution(int n) {
if(n <= 0) return 0;
vector<int> v;
int ret = 0;
while(n){
v.push_back(n%10);
n /= 10;
}
for(int i = v.size()-1;i >= 0;--i){
auto left = 0,right = 0,t = 1;
for(int j = v.size() - 1;j > i;--j){
left = left * 10 + v[j];
}
for(int j = i-1;j >= 0;--j){
right = right * 10 + v[j];
t *= 10;
}
ret = ret + left*t;
if(v[i] == 1){
ret += (right+1);
}else if (v[i] > 1)
ret += t;
}
return ret;
}};

京公网安备 11010502036488号