LeetCode-400. Nth Digit
阿新 • • 發佈:2019-02-08
問題:https://leetcode.com/problems/nth-digit/?tab=Description
Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
**分析:**S1=1 S2=12 S3=123 S4=1234 … S9=123456789 S10=12345678910
S11=1234567891011 … 求在S串中的第N個數字是多少。
一位數有9個,兩位數有90個,三位數有900個。。。所以對於給定的一個數,先看它落在幾位數的範圍內,再找到具體落在哪個數字上,落在哪個數字的哪一位上。例如n=140,因為一位數有9個,可以位數加1,n-9=131。兩位有90個,2*90=180>131,所以目標數字是兩位的。10+(131-1)/2=75,落在75上。(131-1)%2=0,落在75的第0位,即7。如此得到。
C++程式碼:
class Solution {
public:
int findNthDigit(int n) {
long digit = 1, ith = 1, base = 9;
while(n > base*digit)
{
n -= base*(digit++);
ith += base;
base *= 10;
}
return to_string(ith+(n-1)/digit)[(n-1)%digit]-'0' ;
}
};