题目:
给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位数字。
示例 1:
输入:n = 3
输出:3
示例 2:输入:n = 11
输出:0
解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是 0 ,它是 10 的一部分。
提示:
1 <= n <= 231 - 1
代码:
public int findNthDigit(int n) {
int i=1;
long t=9,m=1,b=n;
while(n-t*i>0){
b=b-t*i;
i++;
t=t*10;
m=m*10;
}
long j=b%i;
long k=b/i;
if(j==0){
m--;
}
if(k>0){
m=m+k;
}
if (j != 0) {
j=i-j;
for(int o=0;o<j;o++) {
m=m/10;
}
}
m=m%10;
int v= (int)m;
return v;
}
分析:
读题可知他要求的是数字而不是数,也就是说n位数有n个数字,通过分析我们可以知道1位数有9个,共9个数字,两位数有90个,共180个数字,n位数有9*10^(n-1)个,共9*10^(n-1)*n个数字,由此来写下的我的代码。
个人在编写时觉得的三个点
1、j=0时
当没有余数时表示她正好除尽,也就是说我们要去的是上一个数的末尾
2、j=i-j
当j!=0时,他的第j位,表示他需要先除去i-j个10
3、long类型
一开始我全部定义的是int变量,但测试样例是有一个n=10^10,这时候数来到了11位数,int类型存不下,所以需要long类型来存储
274




被折叠的 条评论
为什么被折叠?



