題目:序列化的數字,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...