11月的力扣打卡有点懈怠了,今天看到某些人全站排名7000,竞赛排名2400,表示再

400. 第 N 位数字

难度中等277

给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字。

示例 1:

1
2
输入:n = 3
输出:3

示例 2:

1
2
3
输入:n = 11
输出:0
解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是 0 ,它是 10 的一部分。

提示:

  • 1 <= n <= 231 - 1
  • n 位上的数字是按计数单位(digit)从前往后数的第 n 个数,参见 示例 2

通过次数41,651

提交次数91,695

这一题的思路不难,对于N=1-9来说

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

class Solution {
    public int findNthDigit(int n) {
        if(n<10) return n;
        int i=2;
        long maxnum=9;
        long temp=0;
        int mod=0;
        while(true){
            if(n<maxnum+9*(long)Math.pow(10,i-1)*i){
                long before=0;
                for(int j=0;j<i;j++)before+=(long)9*Math.pow(10,j-1);
                temp=(n-maxnum+1)/i+before;//这里的加1是因为往数轴正方向再数一个值
                mod=(int)(n-maxnum-1)%i;//这里的减1是为了让mod=0对准最高位
                //    346 347 348     349 350 351            
                //152:1   5   2       1   5  3
                // System.out.println("temp="+temp+" mod="+mod+" i="+i);
                  //System.out.println("maxnum="+maxnum);
                String s=String.valueOf(temp);
                return s.charAt(mod)-48;
            }else{
            maxnum=maxnum+9*(long)Math.pow(10,i-1)*i;
            i++;
            } 
        }
    }
}