天天看點

[LeetCode] Nth Digit 第N位

Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...

Note:

n is positive and will fit within the range of a 32-bit signed integer (n < 231).

Example 1:

Example 2:

這道題還是蠻有創意的一道題,是說自然數序列看成一個長字元串,問我們第N位上的數字是什麼。那麼這道題的關鍵就是要找出第N位所在的數字,然後可以把數字轉為字元串,這樣直接可以通路任何一位。那麼我們首先來分析自然數序列和其位數的關系,前九個數都是1位的,然後10到99總共90個數字都是兩位的,100到999這900個數都是三位的,那麼這就很有規律了,我們可以定義個變量cnt,初始化為9,然後每次循環擴大10倍,再用一個變量len記錄目前循環區間數字的位數,另外再需要一個變量start用來記錄目前循環區間的第一個數字,我們n每次循環都減去len*cnt (區間總位數),當n落到某一個确定的區間裡了,那麼(n-1)/len就是目标數字在該區間裡的坐标,加上start就是得到了目标數字,然後我們将目标數字start轉為字元串,(n-1)%len就是所要求的目标位,最後别忘了考慮int溢出問題,我們幹脆把所有變量都申請為長整型的好了,參見代碼如下: