劍指 Offer 44. 數字序列中某一位的數字
阿新 • • 發佈:2022-03-21
劍指 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'; }