题目: 44. 数字序列中某一位的数字
思路:
若想要求第n
位:
- 先求第
n
位所在的数字num
的位数digit
,比如第11
位所在的数字num
为10
,位数为2
; - 求所在的数字
num
; - 求所在
num
的第几位;
题解
class Solution {
/**
* 若想求第n位
* 1.先求第n位所在的数字num的位数digit
* 2.求所在的数字num
* 3.求所在num的第几位
*/
public int findNthDigit(int n){
//初始化
int digit = 1; //位数
long start = 1; //每个digit开始的数字
long count = 9; //在digit位数中数位的数量=9*start*digit
//1.求所在num的位数digit
while(n>count){ //说明n所在num比之前的位数digit大
n -= count; //减去上一个位数的数位的总和
digit ++;
start *= 10;
count = 9*start*digit;
}
/**
* 目前的n是已经减去了比它小的位数的总和
* 比如n为15的话,指向的是12数字的2,那么此时的n则为15-9=6
*/
//2.求所在的数字num
long num = start + (n-1)/digit;
//3.求所在num的第几位
int i = (n-1)%digit;
return Long.toString(num).charAt(i) - '0';
}
}