您的位置:首页 > 其它

【Leetcode】400. Nth Digit

2016-09-18 13:58 337 查看
题目链接:https://leetcode.com/contest/5/problems/nth-digit/

题目:

Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …

Note:

n is positive and will fit within the range of a 32-bit signed integer (n < 231).

思路:

1~9 9个数 9*1=9个digit

10~99 90个数 90*2=180个digit

100~999 900个数 900*3=2700个digit

10^k ~ k个9连成的数 9*10^k个数 (90*10^k)*k个digit

所以给点n,首先确定在几位数之间,如在1000~9999还是在其他之间?然后确定是该区间的哪个数?最后确定是该数字的哪个digit?

注意防止溢出。

算法:

public int findNthDigit(int n) {
int k = 1;
long len = 0;
while (n > len) {
len += (int) (9 * k * Math.pow(10, k - 1));
k++;
}
k--;
len -= (int) (9 * k * Math.pow(10, k - 1));
// ————前部分
int num = 0;
if ((n - len) % k == 0) {
num = (int) ((int) Math.pow(10, k - 1) + (n - len) / k - 1);
String s = String.valueOf(num);
return Integer.parseInt("" + s.charAt(s.length() - 1));
} else {
num = (int) ((int) Math.pow(10, k - 1) + (n - len) / k);
String s = String.valueOf(num);
return Integer.parseInt("" + s.charAt((int) ((n - len) % k - 1)));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: