สมมติว่าเรามีลำดับจำนวนเต็มอนันต์หนึ่งลำดับ เราต้องหาหลักที่ 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