數字以0123456789101112131415…的格式序列化到乙個字串行中。在這個序列中,第5位(從下標0開始計數)是5,第13位是1,第19位是4,等等。
請寫乙個函式,求任意第n位對應的數字。
示例 1:
輸入:n = 3
輸出:3
示例 2:
輸入:n = 11
輸出:0
這道題其實就是找一下規律,同時需要我們細心計算好一些細節,比如位數、餘數、索引等。
找到 n 屬於哪個數字裡的索引。比如 n = 5,那 n 就是個位這個數字裡的索引;或者 n = 11,那 n 就是十位這個數字裡的索引。
確定了 n 屬於哪個數字,我們需要進一步定位到 n 具體屬於哪個數。比如 n = 11,指的就是 10 這個數。
確定了 n 屬於哪個數,我們就需要算出 n 是這個數的第幾位,從而得到最終答案。比如 n = 11,指的是 10 這個數的第 1 位(索引從 0 開始),從而最終答案就是 0。
這裡我們定義了幾個變數來幫助我們完成上面的三步(**中對應處也有注釋):
**實現:
class
solution
// 上面的循壞結束後
// digit 等於原始的 n 所屬的數字;start 等於原始 n 所屬數字的數的起點
// index_count 等於原始的 n 所屬數字的索引總個數(不重要了,下面不用)
// n 等於在當前數字裡的第 n-1 個索引(索引從 0 算起)
long num = start +
(n-1
)/digit;
// 得到原始的 n 對應哪個數字
int remainder =
(n-1
)% digit;
// 餘數就是原始的 n 是這個數字中的第幾位
string s_num =
to_string
(num)
;return
int(s_num[remainder]
-'0');
// n 對應著第 remainder 位,再轉成 int}}
;
劍指offer 數字序列中某一位的數字
數字以0123456789101112131415 的格式序列化到乙個字串行中。在這個序列中,第5位 從0開始計數 是5,第13位是1,第19位是4,等等。請寫乙個函式求任意位對應的數字。主要思路 舉例分析,比如找第1001位數字,1 1位數的數值有10個 0 9,數字為10 1 10個,顯然100...
劍指Offer 數字序列中某一位的數字
數字以0123456789101112131415 的格式序列化到乙個字串行中。在這個序列中,第5位 從下標0開始計數 是5,第13位是1,第19位是4,等等。請寫乙個函式,求任意第n位對應的數字。意思大概是這麼個意思,但是輪到自己寫的時候總是出錯,不知道為啥,於是改了種方法,就是n為兩位數以上的時...
劍指offer 數字序列中某一位的數字
數字以0123456789101112131415 的格式序列化到乙個字串行中。在這個序列中,第5位 從下標0開始計數 是5,第13位是1,第19位是4,等等。請寫乙個函式,求任意第n位對應的數字。示例 1 輸入 n 3輸出 3示例 2 輸入 n 11輸出 0解題思路 用最簡單的方法,依次遍歷,計算...