數字以0123456789101112131415…的格式序列化到一個字符序列中。在這個序列中,第5位(從下標0開始計數)是5,第13位是1,第19位是4,等等。
請寫一個函數,求任意第n位對應的數字。
思路:以第15位數字2爲例(2隸屬與12,兩位數,位於12從左側以0號開始下標爲1的位置) 步驟1:首先確定該數字是屬於幾位數的; 如果是一位數,n<9;如果是兩位數,n<9+90*2=189; 說明是兩位數。 步驟2:確定該數字屬於哪個數。10+(15-10)/2= 12。 步驟3:確定是該數中哪一位。
func findNthDigit(n int) int { if n < 10 { return n } digits := 1 for { nums := count(digits) if n > digits*nums { n -= digits * nums digits++ } else { preCount := n / digits //目標數前有多少個digits位數 index := n - preCount*digits //第幾位 t := int(math.Pow(10, float64(digits-1))) + t return getDigit(t, index, digits) } } } //統計n位數有多少個,如3位數有900個,1000-100=900 func count(n int) int { if n == 1 { return 10 } return int(math.Pow(10, float64(n)) - math.Pow(10, float64(n-1))) } //獲取整數n的第index位,如871的第0位爲8 func getDigit(n, index, amount int) int { res := 0 for index < amount { res = n - n/10*10 n = n / 10 index++ } return res }