其他分享
首页 > 其他分享> > 剑指 Offer 44. 数字序列中某一位的数字

剑指 Offer 44. 数字序列中某一位的数字

作者:互联网

剑指 Offer 44. 数字序列中某一位的数字

数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。

请写一个函数,求任意第n位对应的数字。

 

示例 1:

输入:n = 3
输出:3

示例 2:

输入:n = 11
输出:0

 

限制:

 

解析:

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