题解 | #数字序列中某一位的数字#
数字序列中某一位的数字
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#