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

2021-10-02 14:21:39 字數 901 閱讀 6514

數字以 0123456789101112131415… 的格式序列化到乙個字串中,求這個字串的第 index 位。

第5位是5,第13位是1,第19位是4等等

假設index = 1001

序列的前10位是0~9這10個只有一位的數字,顯然1001在這10個數字之後,因此這10個數字可以直接跳過,我們再從後面緊跟著的序列中找第991位的數字(1001-10 = 991)。

接下來的180個數字是90個10~99的兩位數。由於991 > 180,所以991在所有的兩位數之後。我們在跳過這90個兩位數,找881位(991-90 = 881)。

接下來的2700位是900個100~999的三位數。由於881< 2700,所以第881位是某個三位數中的一位,由於881 = 270*3 + 1,這意味著881位是從100開始的第270個數字即370中的第一位,也就是7。

public

intgetdigitatindex

(int index)

}/**

* place 位數的數字組成的字串長度

* 10, 90, 900, ...

*/private

intgetamountofplace

(int place)

/** * place 位數的起始數字

* 0, 10, 100, ...

*/private

intgetbeginnumberofplace

(int place)

/** * 在 place 位數組成的字串中,第 index 個數

*/private

intgetdigitatindex

(int index,

int place)

劍指offer 44 數字序列中某一位的數字

這種數學題好難 參考 1 理解題意 以第15位數字2為例 2隸屬與12,兩位數,位於12從左側以0號開始下標為1的位置 步驟1 首先確定該數字是屬於幾位數的 如果是一位數,n 9 如果是兩位數,n 9 90 2 189 說明是兩位數。步驟2 確定該數字屬於哪個數。10 15 10 2 12。步驟3 ...

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

題目描述 在無限的整數序列 1,2,3,4,5,6,7,8,9,10,11,中找到第 n 個數字。數字以0123456789101112131415 的格式序列化到乙個字串行中。在這個序列中,第5位 從0開始計數,即從第0位開始 是5,第13位是1,第19位是4,等等。請寫乙個函式,求任意第n位對應...

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

思路 求該數字所在的資料範圍,即屬於幾位數 求該數字的具體數值,是多少 找出所求是數字中的第幾位,求出數字中對應的那一位 param n return var findnthdigit function n let digit 1,count 10,numcount 10 求出是digit位數 wh...