题目描述:
数字以 0123456789101112131415... 的格式作为一个字符序列,在这个序列中第 2 位(从下标 0 开始计算)是 2 ,第 10 位是 1 ,第 13 位是 1 ,以此类题,请你输出第 n 位对应的数字。
数据范围: 0≤n≤10^9
示例:
输入:
10
返回值:
1
解题思路:
本题考察算法-搜索算法的使用。该题算是一道简单的数学题。
个位数字1-9共9位数字,9个位数;十位数字10-99共9*10个数字,90*2个位数;百位数字100-999共9*100个数字,900*3个位数。
基于上述规律,先确定目标位处于哪个区间,再根据当前区间内单个数字的位数进行推算,即可得到目标位的数字。
测试代码:
class Solution { public: int findNthDigit(int n) { // 当前的位数,个位是1,十位是2,百位是3 int digit = 1; // 当前位数的起始,个位是1,十位是10,百位是100 long long start = 1; // 当前位数区间内数字个数,个位是9,十位是180,百位是2700 long long sum = 9; // 确定n处于哪一位数区间 while(n > sum) { n -= sum; start *= 10; digit++; sum = 9 * start * digit; } // 确定n处于哪个数字上 int num = start + (n - 1) / digit; // 确定n处于当前数字的哪一位上 int index = (n - 1) % digit; return to_string(num)[index] - '0'; } };