序列中的1位数是 0~9 ,共10个。1001 大于 1 * 10 ,因此,这个数一定在0 ~ 9 之后;
序列中的2位数是 10 ~ 99 ,共90个。(1001 - 1 * 10) = 991 大于 2 * 90,因此,这个数一定在 10 ~ 99 之后;
序列中的3位数是 100 ~ 999,共900个。(1001 - 1 * 10 - 2 * 90) = 811 小于 3 * 900,因此,这个数一定在 100 ~ 999 之间;
解题步骤
1.确定所求数位的所在数字的位数
2.确定所求数位所在的数字
3.确定所求数位在 numnum 的哪一数位
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return int整型
*/
public int findNthDigit (int n) {
// write code here
if(n < 10)
return n;
n -= 10;
int digit = 2;
long num = 10, sum = 90;
while(n - digit * sum >= 0) {
n -= digit * sum;
digit++;
sum *= 10;
num *= 10;
}
int div = n / digit;
int mod = n % digit;
long now = num + div;
return String.valueOf(now).charAt(mod) - '0';
}
}