代码拉取完成,页面将自动刷新
同步操作将从 doocs/leetcode 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
数字以 0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第 5 位(从下标 0 开始计数)是 5,第 13 位是 1,第 19 位是 4,等等。
请写一个函数,求任意第 n 位对应的数字。
示例 1:
输入:n = 3
输出:3
示例 2:
输入:n = 11
输出:0
限制:
0 <= n < 2^31
注意:本题与主站 400 题相同:https://leetcode-cn.com/problems/nth-digit/
90*2=180
位900*3=2700
位。先求出第 n 位所在的 pow 和真实数字,进而求出真实数字的第 n % (pow + 1)
位即可。
class Solution:
def findNthDigit(self, n: int) -> int:
def get_bit_num():
return 10 if p == 0 else 9 * pow(10, p) * (p + 1)
if n < 10:
return n
p = count = 0
while 1:
count = get_bit_num()
if n < count: break
n -= count
p += 1
num = n // (p + 1) + pow(10, p)
return int(str(num)[n % (p + 1)])
class Solution {
public int findNthDigit(int n) {
if (n < 10) return n;
int pow = 0, count;
while (true) {
count = getBitNum(pow);
if (n < count) break;
n -= count;
++pow;
}
int num = n / (pow + 1) + (int) Math.pow(10, pow);
return String.valueOf(num).charAt(n % (pow + 1)) - '0';
}
private int getBitNum(int pow) {
if (pow == 0) {
return 10;
}
return (int) (9 * Math.pow(10, pow) * (pow + 1));
}
}
/**
* @param {number} n
* @return {number}
*/
var findNthDigit = function (n) {
let i = 9;
let a = 1;
let remain = n;
while (i * a < remain) {
remain -= i * a;
i *= 10;
a++;
}
let b = remain % a;
let res = 10 ** (a - 1) + ~~(remain / a);
if (b === 0) {
b = a;
res--;
}
return res.toString()[b - 1];
};
class Solution {
public:
int findNthDigit(int n) {
int digit = 1;
long long start = 0;
long long count = 10;
while (n > count) {
n -= count;
++digit;
start = start == 0 ? 10 : start * 10;
count = 9 * start * digit;
}
long long num = start + n / digit;
return to_string(num)[n % digit] - '0';
}
};
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。