题目
给你一个整数 n
,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...]
中找出并返回第 n
位数字。
解题思路
[1, 9]
的数字位数都是1,[10, 99]
的数字位数都是2…以此类推,可以先确定数字的位数。减去前面所有的位数和,再根据余值计算具体的数,然后在数上取答案。变量名用的比较乱,具体看代码注释吧。
代码
class Solution {
public int findNthDigit(int n) {
long tmp = 9;
int nowNumber = 0, cnt = 1; //nowNumber表示第N位所在的数
while (n - cnt * tmp > 0) {
n -= cnt * tmp;
nowNumber += tmp;
tmp *= 10;
cnt++;
}
int res = n / cnt; // 这里表示在所有的cnt位数中,数的位置
nowNumber += res;
if (n % cnt != 0) { //判断是否在某个数的末尾,不在末尾的话就+1
String nextNumber = String.valueOf(nowNumber + 1);
n -= cnt * res;
return nextNumber.charAt(n - 1) - '0';
} else {
return nowNumber % 10;
}
}
}