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