剑指offer(C++)-JZ44:数字序列中某一位的数字(算法-搜索算法)
Posted 翟天保Steven
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer(C++)-JZ44:数字序列中某一位的数字(算法-搜索算法)相关的知识,希望对你有一定的参考价值。
作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
题目描述:
数字以 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';
;
以上是关于剑指offer(C++)-JZ44:数字序列中某一位的数字(算法-搜索算法)的主要内容,如果未能解决你的问题,请参考以下文章