leetCode-Record
leetCode-Record copied to clipboard
面试题44. 数字序列中某一位的数字
这题就是找规律,规律大概是这样的: 比如说: 个位数: 1 ~ 9 9 * 1 两位数: 10 ~ 99 90 * 2 三位数: 100 ~ 999 900 * 3 ... 假如n是132,先用n去和 9* 1 ...这些数字去进行减,得出n的数字在哪个区间里面,然后找到对应的数字,求出是哪个位数即可: 代码如下:
var findNthDigit = function(n) {
if (n <= 9) {
return n
}
let len = 1
let base = 9
while (n - len * base > 0) {
n -= base * len
base *= 10
len++
}
let idx = n % len
if (idx === 0) {
idx = len
}
let number = 1
for (let i = 1; i < len; i++) {
number *= 10
}
number += idx == len ? Math.floor(n / len) - 1 : Math.floor(n / len)
for (let i = idx; i < len; i++) number = Math.floor(number / 10)
return number % 10
}
// console.log(findNthDigit(16));