题解 | #数字序列中某一位的数字#
数字序列中某一位的数字
https://www.nowcoder.com/practice/29311ff7404d44e0b07077f4201418f5
class Solution {
public:
int findNthDigit(int n) {
// write code here
if(n < 10) return n; // 个数小于10时候,就是当前字符序号
long long start = 1; // 一位数时,开始第一个数字为1,注意使用long long类型,否则容易越界
long long sum = 9; // 一位数时,总数为9个,注意使用long long类型,否则容易越界
int num = 1; // 表示位数为1
// int value = n;
while (n > sum) { // 迭代到最接近位数区间
n -= sum; // 将前面位数区间的元素组合的数字个数剔除
num++; // 位数
start*= 10; // 更新下一位数时开始的数值
sum = num * start * 9; // 统计下一位数区间的字符个数
}
int value = start + (n-1)/num; // 算一下是哪个数
int id = (n-1)%num; // 求余运算,求得数值的第几位
return to_string(value)[id]-'0'; // 把这个数的对应位置字符恢复数值返回
}
};
挤挤刷刷! 文章被收录于专栏
记录coding过程

查看17道真题和解析