Skip to content

Latest commit

 

History

History
35 lines (29 loc) · 844 Bytes

File metadata and controls

35 lines (29 loc) · 844 Bytes
/*
在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...中找到第 n 个数字。
注意:
n 是正数且在32位整数范围内 

输入:
11
输出:
0
说明:
第11个数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是0,它是10的一部分。
 */
var n = function (n) {
  //先求出该数所在区间的位数
  let bit = 1; //所在区间的位数
  let p = 9; //区间的长度
  while (n - p * bit > 0) {
    n = n - p * bit;
    bit++;
    p = p * 10;
  }

  const indexInSubRange = (n - 1) / bit; //定位到是区间里的第几个数
  const indexInNum = (n - 1) % bit; //定位到是该数的第几位

  const num = Math.pow(10, bit - 1) + indexInSubRange; //还原数字
  const re = ((num >> 0) + '')[indexInNum]; //结果是该数字的第indexInNum位

  return re;
};

console.log(n(8));