剑指 Offer 44. 数字序列中某一位的数字
知识点:数学
题目链接
题目描述
数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。
请写一个函数,求任意第n位对应的数字。
示例 1:
输入:n = 3
输出:3
示例 2:
输入:n = 11
输出:0
限制:
0 <= n < 231
解题思路
- 我们知道一位数有9个 每个数1位 两位数有90个 每个数2位
- 所以我们可以先判断第n位是落在几位数中的
- 然后判断是落在哪个数
- 再取位置上的数 转为string
- 注意数值范围
代码
#include "cheader.h"
class Solution {
public:
int findNthDigit(int n) {
long start = 1, digit = 1, num = 9;
// 找到是几位数
while(n > num){
n -= num;
digit += 1; //几位数
start *= 10; //这位数的开头
num = 9 * start * digit; //这位数占了几个位
}
// 找到是哪个数
long x = start + (n-1)/digit;
// 找到这个数的第几位
int d = (n-1)%digit;
string str = to_string(x);
return str[d]-'0';
}
};
今天也是爱zz的一天!