劍指Offer 數字序列中某一位的數字

2021-10-17 04:14:13 字數 1161 閱讀 9422

數字以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解題思路 用最簡單的方法,依次遍歷,計算...