Nth Digit 第N個數字
阿新 • • 發佈:2019-02-04
在無限的整數序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...中找到第 n 個數字。
注意:
n 是正數且在32為整形範圍內 ( n < 231)。
示例 1:
輸入: 3 輸出: 3
示例 2:
輸入: 11 輸出: 0 說明: 第11個數字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 裡是0,它是10的一部分。
思路:這道題分三步走,同時還要注意一些邊界條件和坑。
步驟1:找到位於第幾個序列(1~9為第一個序列,10~99為第二個序列,100~999為第三個序列,以此類推)
步驟2:找到位於序列的第幾個數
步驟3:找到位於第幾個數的第幾位
步驟一詳解:1~9有9個數,10~99有90個數,100~999有900個數,所以第n個序列有9*10*n個數
步驟二詳解:比如已經定位到第三個序列,因為第三個序列每個數字都有三位,所以通過除三來定位在第幾個數
步驟三詳解:如何定位到第幾位呢?可以通過取餘的方法來定位,同理,依然是通過對3取餘
參考程式碼:
class Solution { public: //1~9 9個,10~99 90個,100~999 900個 int findNthDigit(int n) { //先找到處在第幾個序列,第一個序列1~9,第二個序列10~99,以此類推。。。 int weight = 1; int index = 1; long long sum = 9 * weight*index; while ((((float)n)/sum) >1.0) { n -= sum; weight *= 10; index++; sum= 9 * weight*index; } //然後找位於序列的哪個數 string nth = to_string(((n - 1) / index) + weight); //然後找到哪個數的第幾位 return nth[((n - 1) % index)] - '0'; } };