【剑指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 };
View Code

填充

posted @ 2022-11-18 18:45  啊原来是这样呀  阅读(22)  评论(0编辑  收藏  举报