題目描述
數字以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));
}
}