劍指 offer 44. 數字序列中某一位的數字
數字以0123456789101112131415…的格式序列化到乙個字串行中。在這個序列中,第5位(從下標0開始計數)是5,第13位是1,第19位是4,等等。
請寫乙個函式,求任意第n位對應的數字。
示例 1:
輸入:n = 3
輸出:3
示例 2:
輸入:n = 11
輸出:0
限制:0 <= n < 2^31
解:/*
範圍 digit 範圍內位數
0~9 1 10
10~99 2 902
100~999 3 9003
*///確認n所在數字,需確認n所在數字的位數digit 和 n所在數字所在數字範圍的起始數start
//則num = start + (n - cnt)/digit,cnt為start之前的總位數
//已知num,且已知n在num中的第(n - cnt)%digit位,將num轉換為字串,再取該位即可
class
solution
cnt -=9
*start*digit;
//當前start處
int num = start +
(n - cnt)
/digit;
string str =
to_string
(num)
;//數字轉字串數字
char tmp = str[
(n - cnt)
%digit]
;return tmp -
'0';}}
;
n的十進位制位數為log 10 n
故while迴圈,時間複雜度為o(logn),數字轉字串,時間複雜度為o(logn),共o(logn)。
由於使用了字串轉數字,故空間複雜度為o(logn)。
劍指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...