天天看點

劍指offer44---數字序列中某一位的數字

題目描述

數字以01234567891011121314…的格式序列化到一個字元序列中。在這個序列中,第5位是5(從0開始),第13位是1,第19位是4,等等。請寫一個函數,求任意第n位對應的數字。

思路:1)找出n屬于的數的長度是多少

2)如果n屬于長度為len+1的某個數,找出n屬于第幾個長度為len+1的數

3)找出n是那個數的第幾位

package Function;
public class findNthDigit44 {
    public int findNthDigit(int n) {
        if(n==0)
            return 0;
        //數字的長度為len; 從長度為1的數字開始, 也就是從個位數開始
        int len = 1;
        //長度為len的數字有count個
        long count = 9;
        //長度為len的第一個數字
        int start = 1;
        //确定第n位對應的數字的長度
        while(n > len*count){
            // n = n - len*count; //這麼寫會報錯, 需要把count轉成int
            n -= len*count; //這麼寫就不報錯了
            //update
            len++;
            start = start*10;
            count = count*10;
        }
        //确定第n位對應的數字是哪個長度為len的數字
        start = start + (n%len==0? n/len-1 : n/len);
        //取出該數字的第(n-1)%len位
        String s = Integer.toString(start);
        return Character.getNumericValue(s.charAt(n%len==0? len-1 : n%len-1));
    }
}
           

繼續閱讀