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

2021-10-21 21:21:33 字數 1170 閱讀 2288

題目:序列化的數字,0123456789101112131415…。0對應第0位,9對應第9位,但是第10位為1。給你乙個n,讓你求第n位的數字是幾?(0~9)

public int findnthdigit(int n)

思路找規律題。

1.先根據n來找到該數字的位數

(1位數,1到9,有9位。2位數,10到99,有180位=9乘10乘2。3位數,100到999,有2700位=9乘100乘3。用interval-1表示該n與start=1/10/100…的距離,digit表示所求位數。

可以使用while當temp小於count位數時才結束迴圈(不需要當temp為0時結束,不好實現)。但是這個沒有考慮到單數字,需要前面再考慮一下。在while裡完成所有變數的更新。)

2.再找到該數字是幾

(用interval-1再除digit求出與start數字之間的距離)

3.再確定所要的位是這個數字的第幾位

(用interval-1再%digit來對映到start的位,來得到)

注意:start每次乘10,會超出int範圍,所以由start得到的變數都要寫為long,全部都寫為long就好

最後用了化為string裡面取char,基本操作要可以寫出來。

全程可以舉n=15的例子,結果為2。來作為參考。

public

intfindnthdigit

(int n)

long num = start +

(interval -1)

/ digit;

string tempstr = string.

valueof

(num)

;char res = tempstr.

charat((

int)

((interval -1)

% digit));

return res -

'0';

}

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