สมมติว่าเรามีลำดับจำนวนเต็มอนันต์หนึ่งลำดับ เราต้องหาหลักที่ n ของลำดับนี้ ดังนั้นหากอินพุตเป็น 11 เอาต์พุตจะเป็น 0 เหมือนกับว่าเราใส่ตัวเลขเช่น 123456789101112 ดังนั้นหลักที่ 11 จึงเป็น 0
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
len :=0 และ cnt :=9 และ start :=1
-
ในขณะที่ n> len * cnt
-
n :=n – (len * cnt)
-
cnt :=cnt * 10, start :=start * 10
-
เพิ่มเลนขึ้น 1
-
-
start :=start +(n - 1) / เลน
-
s :=เริ่มเป็นสตริง
-
กลับ s[(n – 1) mod len]
ตัวอย่าง (C++)
ให้เราดูการใช้งานต่อไปนี้เพื่อทำความเข้าใจ −
#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));
} อินพุต
11
ผลลัพธ์
0