题目描述
给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …] 中找出并返回第 n 位上的数字。
输入:n = 11
输出:0
解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, … 里是 0 ,它是 10 的一部分。
思路
先确定所属数字的位数,再确定是哪一个数字,最后确定是这个数字的哪一位。
题解
class Solution {
public:
int findNthDigit(int n) {
int d = 1, c = 9;
// 计算是多少位的
while (n > (long) d * c) {
n -= d * c;
d++;
c *= 10;
}
// idx表示数字排在当前位数数字的第几位
int idx = n - 1;
int start = pow(10, d - 1);
// num表示数字是哪一个
int num = start + idx / d;
// didx表示是该数字从前向后的哪一位
int didx = idx % d;
return (num / (int)pow(10, d - didx - 1)) % 10;
}
};