剑指 Offer 44. 数字序列中某一位的数字
作者:互联网
剑指 Offer 44. 数字序列中某一位的数字
数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。
请写一个函数,求任意第n位对应的数字。
示例 1:
输入:n = 3 输出:3
示例 2:
输入:n = 11 输出:0
限制:
0 <= n < 2^31
解析:
10个1位数
90个2位数,90*2
900个3位数,900*2
依次类推
求第n个字符 所属的数字是几位数
然后求出这个数字
在求出相应的位数即可
class Solution { public: int findNthDigit(int n) { long long A[20]; long long N = (long long)n + 1; A[1] = 10; long long m = 90; for(int i = 2; i <= 9; i++) { A[i] = m * i; m *= 10; } int j = 1; while(N - A[j] >= 0) { N -= A[j]; j++; } if(j == 1) return N - 1; int a = N / j, b = N % j; long long k = (long long)pow(10, j - 1) + a; if(b == 0) k--; int ret; if(b == 0) { ret = k % 10; } else ret = k % (int)pow(10, j - b + 1) / (int)pow(10, j - b); return ret; } };
标签:10,数字,Offer,int,44,long,ret,位数 来源: https://www.cnblogs.com/WTSRUVF/p/16503348.html