leetCode-Record
leetCode-Record copied to clipboard
面试题43. 1~n整数中1出现的次数
这题还挺不好写的,找规律吧= = 具体可以看代码实现:
const solve = (n) => {
let sum = 0;
let mul = 1;
let left = n;
let right = 0;
if (!n) {
return 0;
}
while(left > 0) {
let digit = left % 10;
left = Math.floor(left / 10);
if(digit === 1) {
sum += left * mul;
sum += right + 1;
} else if(digit < 1 ) {
sum += left * mul;
} else {
sum += (left + 1) * mul;
}
right += digit * mul;
mul *= 10;
}
return sum;
}
console.log(solve(13));
其实如果找数字n也可以写个板子出来:
const solve = (n, x) => {
let cnt = 0
let mul = 1
let left = n
let right = 0
if (n == 0) {
return x < 1 ? n : 0
}
while (left > 0) {
let digit = left % 10
left = Math.floor(left / 10)
if (digit == x) {
cnt += left * mul
cnt += right + 1
} else if (digit < x) {
cnt += left * mul
} else {
cnt += (left + 1) * mul
}
if (x == 0 && mul > 1) {
cnt -= mul
}
right += digit * mul
mul *= 10
}
return cnt
}
// console.log(solve(13))