链接:
400. 第 N 位数字
题解:
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
class Solution {
public:
int findNthDigit(int n) {
int len=1;//初始数字长度为1
int base=1;//初始范围为1~9
while(n>(long)len*9*base){//如果n不在当前的数字范围内
n-=len*9*base;//减去前面的数字的长度和
len++;//下一轮计算的数字长度
base*=10;//范围为之前的10倍
}
int index = n-1;//剩余的长度为n,这n个字符的编号是从0开始的,而我们要找的就是第n-1个字符
int start = pow(10,len-1);//当前范围内的最小值
int num = start+index/len;//寻找n对应的数字,用n除以数字长度就知道是从start开始的第几个数字了
int digit = index%len;//寻找n对应的数字的第几位
return int(num/pow(10,len-digit-1))%10;//取数字num的第digit位
// char ch = to_string(num)[digit]; //转成字符串再输出也可以
// return ch-'0';
}
};
class Solution {
public:
int findNthDigit(int n) {
if (n <= 0) {
return 0;
}
int len = 1;
while (n > (long)9*(long)pow(10, len-1)) {
n -= 9* (long)pow(10, len-1);
++len;
}
int index = n-1;
int start = pow(10, len-1);
int step = index/len;
int num = start + step;
int i = index%len;
return to_string(num)[i] - '0';
}
};