1. 程式人生 > 其它 >劍指 Offer 44. 數字序列中某一位的數字

劍指 Offer 44. 數字序列中某一位的數字

劍指 Offer 44. 數字序列中某一位的數字

題目

連結

https://leetcode-cn.com/problems/shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi-lcof/

問題描述

數字以0123456789101112131415…的格式序列化到一個字元序列中。在這個序列中,第5位(從下標0開始計數)是5,第13位是1,第19位是4,等等。

請寫一個函式,求任意第n位對應的數字。

0 <= n < 2^31

示例

輸入:n = 3
輸出:3

提示

0 <= n < 2^31

思路

屬於找規律的題目,首先是0-9十個數,都是一位數,之後10-99九十個數,都是兩位數。

通過迴圈找到,該數字所在的數是幾位數。

知道在多少位數之後,判斷是在第幾個數,第幾位,輸出。

複雜度分析

時間複雜度 O(logn)
空間複雜度 O(logn)

程式碼

Java

    public int findNthDigit(int n) {
        int digit = 1;
        long start = 1;
        long count = 9;
        while (n > count) {
            n -= count;
            digit += 1;
            start *= 10;
            count = digit * start * 9;
        }
        long num = start + (n - 1) / digit;
        return Long.toString(num).charAt((n - 1) % digit) - '0';
    }