题解 | #数字序列中某一位的数字#
数字序列中某一位的数字
https://www.nowcoder.com/practice/29311ff7404d44e0b07077f4201418f5
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return int整型
*/
int findNthDigit(int n) {
// write code here
if(n < 10) return n;
int num_len[10];
int n_len = 9;
// 长1的数有10个,长2的90个,长3的900个...先判断n落在长度为多少的区间
for(int i = 1; i<9 ; i++){
if(i == 1) num_len[i] = 10;
else{
num_len[i] = num_len[i-1] + i * 9 * (int)pow(10, i-1);
}
if(n < num_len[i]){
n_len = i;
break;
}
}
//计算第几个数字,减去上一个长度数字的累计个数
int cnt = (n - num_len[n_len - 1]) / n_len;
//计算在这个数字的偏置位数
int bias = (n - num_len[n_len - 1]) % n_len;
int final_num = (int)pow(10, n_len-1) + cnt;
//不能直接返回string的下标强制转换成int的结果,否则会返回字符的数字编码,需要减去字符0
return to_string(final_num)[bias] - '0';
}
};
#剑指offer#
