44. 数字序列中某一位的数字

1. 描述

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

2. 例子

示例 1:
输入:n = 3
输出:3

示例 2:
输入:n = 11
输出:0

3. 限制

  • 0 <= n < $2^{31}$

4. 题解

时间复杂度: O($log_{10}n$)
空间复杂度: O($log_{10}n$)

1.确定所求数位的所在数字的位数 2.确定所求数位所在的数字 3.确定所求数位在哪一数位

class Solution 
{
public:
    int findNthDigit(int n) 
    {
        int digitsPerNumber = 1;
        long beginning = 1, digitsCount = 9;
        while(n > digitsCount)
        {
            digitsPerNumber++;
            n -= digitsCount;

            beginning *= 10;
            digitsCount = beginning * 9 * digitsPerNumber;
        }

        long targetNumber = beginning + (n - 1) / digitsPerNumber;
        return to_string(targetNumber)[(n - 1) % digitsPerNumber] - '0';
    }
};
Last updated:
Tags: 数学
comments powered by Disqus