11月的力扣打卡有点懈怠了,今天看到某些人全站排名7000,竞赛排名2400,表示再
难度中等277
给你一个整数 n
,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...]
中找出并返回第 n
位上的数字。
示例 1:
示例 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++;
}
}
}
}
|