您的位置:首页 > 其它

400. Nth Digit

2017-12-28 12:47 141 查看
1、题目描述

所有正整数都连在一块,返回第n位的数字是啥。

2、思路

1位数字有9个;

2位数组有90个;

3位。。。900个;

k位。。。9*pow(10,k-1)

先判断第n位所在的位置应该是几位数k,此时n把前面的数字都减去还剩几位数n。

问题简化为找k位数字排到一块的第n位数字。

计算n/k and n%k;

1)n%k=0,说明答案正好落在第n/k个数字的最后1位上。

2)n%k!=0,说明答案落在第n/k+1个数字的从左往右数的第n%k位上。

3、代码

int findNthDigit(int n) {
long long x = 9;
long long k=1;
while(n-x*k>0){
n=n-x*k;
x=x*10;
k++;
}
int th = n/k;
int th2 = n%k;
long long ans = 1;
for(int i=1;i<k;i++)
ans*=10;
if(th2==0){
ans=ans+th-1;
return ans%10;
}
else{
ans+=th;
for (int i = th2; i < k; i ++)
ans /= 10;
return ans % 10;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: