數字以0123456789101112131415…的格式序列化到乙個字串行中。在這個序列中,第5位(從0開始計數)是5,第13位是1,第19位是4,等等。請寫乙個函式,求任意第n位對應的數字。
最常規的做法:從0開始對每個數字求位數個數並累加,直至n位於累加的範圍內,由此再具體求第n位對應的數字。常規做法是可行的,可其效率過低,應該有更好的做法。可以先考慮找規律:一位數0~9有10個,兩位數10~99有2*90個(即180個),三位數100~999有3*900(即2700個)……以此類推:乙個n位數有n*9*10^(n-1)個。至此我們可以通過此規律確定題目中的n是幾位數,此外可以確定到n具體位於哪個數字上的第幾位。例:當n為1001時,1001>10,則即求10為始端的第991位對應的數字,又991>180,則即求以100為始端的第881位對應的數字,再者811<2700,確定對應數字為3位數。由於811=3×270+1,則結果為以100開始的第270個數字即370的中間一位,也就是7.
**如下:
public
intgetgitnum
(int index)
int left=index+count;
int num=
(int
)math.
pow(
10,git-1)
+left/git;
if(git==
1)num--
; string strnum=integer.
tostring
(num)
;return strnum.
charat
(left%git)
-'0'
;}
44 數字序列中某一位的數字
數字以0123456789101112131415 的格式序列化到乙個字串行中。在這個序列中,第5位 從下標0開始計數 是5,第13位是1,第19位是4,等等。請寫乙個函式,求任意第n位對應的數字。示例 1 輸入 n 3 輸出 3 示例 2 輸入 n 11 輸出 0 限制 0 n 2 31注意 本題...
數字序列中某一位的數字
面試題44 數字序列中某一位的數字 題目 數字以0123456789101112131415 的格式序列化到乙個字串行中。在這 個序列中,第5位 從0開始計數 是5,第13位是1,第19位是4,等等。請寫一 個函式求任意位對應的數字。static int digit at uint32 t inde...
數字序列中某一位的數字
012345678910.序列中,第n位數 def solution n if n 0 return 1 if n 10 return n i 2 確定是第幾位數 sums 10 ret 0while true 一位數 0 9 共10個字元 兩位數 10 99 共180個字元 三位數 100 999...