無
數字以 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...