题目
数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。
请写一个函数,求任意第n位对应的数字。
思路
归纳数学规律的题目
- 从1-9有9个数字,每个数字1位
- 从10-99有90个数字,每个数字2位
。。。
代码
typedef long long ll;
class Solution {
public:
int findNthDigit(int n) {
int bits = 1;
ll digital = 1, total = 1;
ll counter = 9;
while(n > counter){
n -= counter;
total *= 10;
digital++;
counter = total * digital * 9;
}
string num = to_string( total + (n - 1) / digital);
int idx = (n - 1) % digital;
return (num[idx] - '0');
}
};
ps:所有设计*10的确定开始数据的都得用long long,要不就会爆int