leetCode-Record icon indicating copy to clipboard operation
leetCode-Record copied to clipboard

面试题44. 数字序列中某一位的数字

Open fireairforce opened this issue 5 years ago • 0 comments

这题就是找规律,规律大概是这样的: 比如说: 个位数: 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));

fireairforce avatar Feb 28 '20 16:02 fireairforce