400. 第 N 位数字
在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …中找到第 n 位数字。
注意:n 是正数且在 32 位整数范围内(n < 231)。
示例 1:
输入:3
输出:3
示例 2:
输入:11
输出:0
解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, … 里是 0 ,它是 10 的一部分
解题思路
- num记录当前的数字
- dig记录位数,我们的数字是从一位数,二位数…这样递增的
- base代表当前位数拥有多少个数字,比如有9个个位数,90个二位数
因此我们只要不断地遍历一位数、二位数,找出我们目标位所在在数字为num
再计算出我们需要的目标位在num中的下标
代码
class Solution {public int findNthDigit(int n) {long base=9,dig=1;int num=0;while(n>base*dig){n-=base*dig;num+=base;base*=10;dig++;}num+=(n-1)/dig+1;long idx=(n-1)%dig+1;while(dig-->idx)num/=10;return num%10;}
}