输入一个整数 n,求从 1 到 n 这 n 个整数的十进制表示中 1 出现的次数。
例如输入 12,从 1 到 12 这些整数中包含 “1” 的数字有 1,10,11 和 12,其中 “1” 一共出现了 5 次。
样例
输入: 12
输出: 5
算法:
按位来统计1的个数
C++代码:
class Solution {
public:
int numberOf1Between1AndN_Solution(int x) {
vector<int> nums;
while(x) nums.push_back(x%10), x /= 10;
int n = nums.size();
int res = 0;
for(int i = n - 1; i >= 0; i--){
int left = 0, right = 0, t = 1; //left 左边的数ab right-> def
for(int j = n - 1; j > i; j--) left = left * 10 + nums[j];
for(int j = i - 1; j >= 0; j--) right = right * 10 + nums[j], t *= 10;
res += left * t;
if(nums[i] == 1) res += right + 1;
else if(nums[i] > 1) res += t;
}
return res;
}
};