400.第N位数字
链接:400.第N位数字
难度:Medium
标签:数学、二分查找
简介:给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位数字。
题解 1 - typescript
- 编辑时间:2021-11-30
- 执行用时:68ms
- 内存消耗:39.4MB
- 编程语言:typescript
- 解法介绍:直接分区间查找。
// 每一段具有相同位数的数字算一个区间
function findNthDigit(n: number): number {
  // 当前数字占几位
  let bit = 1;
  // 当前区间最大值
  let max = 9;
  // 当前区间最小值
  let min = 1;
  // 前区间占用位数
  let cnt = 0;
  // 判断n是否大于下一个区间数量,大于则移动至下一区间
  while (n > cnt + (max - Math.floor(max / 10)) * bit) {
    cnt += (max - Math.floor(max / 10)) * bit++;
    max = max * 10 + 9;
    min *= 10;
  }
  // 删除前一区间的量
  n -= cnt;
  // 计算当前区间中所指向的数字
  const num = Math.floor((n - 1) / bit) + min;
  return +num.toString()[(n - 1) % bit];
}