【剑指offer】37.数字序列中某一位的数字
总目录:
1.问题描述
数字以 0123456789101112131415... 的格式作为一个字符序列,在这个序列中第 2 位(从下标 0 开始计算)是 2 ,第 10 位是 1 ,第 13 位是 1 ,以此类题,请你输出第 n 位对应的数字。
数据范围: 0≤n≤10^9
2.问题分析
1切割,先确定数字段,再确定是哪个数字,再确定是数字的哪一位
2填充
3.代码实例
切割
1 class Solution { 2 public: 3 int findNthDigit(int n) { 4 //记录n是几位数 5 int digit = 1; 6 //记录当前位数区间的起始数字:1,10,100... 7 long long start = 1; 8 //记录当前区间之前总共有多少位数字 9 long long sum = 9; 10 //将n定位在某个位数的区间中 11 while(n > sum){ 12 n -= sum; 13 start *= 10; 14 digit++; 15 //该区间的总共位数 16 sum = 9 * start * digit; 17 } 18 //定位n在哪个数字上 19 int num = start + (n - 1) / digit; 20 //定位n在数字的哪一位上 21 int index = (n - 1) % digit; 22 return to_string(num)[index] - '0'; 23 } 24 };
填充