Giả sử chúng ta có một dãy số nguyên vô hạn, chúng ta phải tìm chữ số thứ n của dãy số này. Vì vậy, nếu đầu vào là 11, thì đầu ra sẽ là 0 giống như khi chúng ta đặt các số như 123456789101112, vậy chữ số 11 là 0.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
len:=0 và cnt:=9 và start:=1
-
while n> len * cnt
-
n:=n - (len * cnt)
-
cnt:=cnt * 10, start:=start * 10
-
tăng len lên 1
-
-
start:=start + (n - 1) / len
-
s:=bắt đầu dưới dạng chuỗi
-
return s [(n - 1) mod len]
Ví dụ (C ++)
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
public:
int findNthDigit(int n) {
lli len = 1;
lli cnt = 9;
lli start = 1;
while(n > len * cnt){
n -= len * cnt;
cnt *= 10;
start *= 10;
len++;
}
start += (n - 1) / len;
string s = to_string(start);
return s[(n - 1) % len] - '0';
}
};
main(){
Solution ob;
cout << (ob.findNthDigit(11));
} Đầu vào
11
Đầu ra
0