Leetcode 400. 第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~9,9个数,是91位数;10 ~ 99,90个数,是902位数;100 ~ 999,900个数,是900*3位数······· 对于第n位数,我们令这个数字对应的数是target,分三步
确定找到的数是几位数,确定对应的数target是什么确定返回值是target中的哪个数字 详细过程见代码
代码
int findNthDigit(int n
) {
if(n
< 10) return n
;
long base
= 9,digit
=1;
while(base
*digit
< n
){
n
-= base
*digit
;
base
*= 10;
digit
++;
}
int idx
= n
% digit
;
if(idx
== 0) idx
= digit
;
int num
= base
/9 + n
/digit
;
if(idx
== digit
) num
--;
idx
= digit
-idx
+1;
while(--idx
){
num
/= 10;
}
return num
%10;
}
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/nth-digit 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。