Leetcode 400.第n个数

第n个数

在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...中找到第 个数字。

注意:
是正数且在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 }

 

posted on 2019-01-07 20:10  kexinxin  阅读(113)  评论(0编辑  收藏  举报

导航