第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的一部分。
1 public class Solution { 2 /** 3 * 这里是找第n个数字(这里的数和数字有区别,数字可以理解为将所有数拼合成一个字符串后的第n为对应的数字(0-9)) 4 * 这里首先分析一下位数和规律 5 * 个位数:1-9,一共9个,共计9个数字 6 * 2位数:10-99,一共90个,共计180个数字 7 * 3位数:100-999,一共900个,共计2700个数字 8 * 4位数,1000-9999,一共9000个,共计36000个数字 9 * 以此类推, 10 * 这样我们就可以首先定位到是哪个数,再找到其对应的数字 11 * */ 12 13 public int findNthDigit(int n) { 14 //小心溢出 15 int digitType = 1; 16 long digitNum = 9; 17 //定位到是几位数 18 while(n > digitNum*digitType){ 19 n -= (int) digitNum*digitType ; 20 digitType++; 21 digitNum*=10; 22 } 23 //定位到是这些几位数里面的第几个的第几位 24 int indexInSubRange = (n -1) / digitType; 25 int indexInNum = (n -1) % digitType; 26 //还原数字 27 int num = (int)Math.pow(10,digitType - 1) + indexInSubRange ; 28 int result = Integer.parseInt((""+num).charAt(indexInNum)+""); 29 return result; 30 } 31 }