數字序列中的某一位數字
題目描述
數字以 0123456789101112131415... 的格式序列化到一個字串中,求這個字串的第 index 位。
題目連結: [數字序列中的某一位數字]()
程式碼
/**
* 標題:數字序列中的某一位數字
* 題目描述
* 數字以 0123456789101112131415... 的格式序列化到一個字串中,求這個字串的第 index 位。
*/
public class Jz70 {
public int getDigitAtIndex(int index) {
if (index < 0) {
return -1;
}
int place = 1; // 1 表示個位,2 表示 十位...
while (true) {
int amount = getAmountOfPlace(place);
int totalAmount = amount * place;
if (index < totalAmount) {
return getDigitAtIndex(index, place);
}
index -= totalAmount;
place++;
}
}
/**
* place 位數的數字組成的字串長度
* 10, 90, 900, ...
*/
private int getAmountOfPlace(int place) {
if (place == 1) {
return 10;
}
return (int) Math.pow(10, place - 1) * 9;
}
/**
* place 位數的起始數字
* 0, 10, 100, ...
*/
private int getBeginNumberOfPlace(int place) {
if (place == 1) {
return 0;
}
return (int) Math.pow(10, place - 1);
}
/**
* 在 place 位陣列成的字串中,第 index 個數
*/
private int getDigitAtIndex(int index, int place) {
int beginNumber = getBeginNumberOfPlace(place);
int shiftNumber = index / place;
String number = (beginNumber + shiftNumber) + "";
int count = index % place;
return number.charAt(count) - '0';
}
}
【每日寄語】 養不教,父之過;教不嚴,師之惰。