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

2021-10-23 14:43:26 字數 982 閱讀 4468

劍指 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...