5

JZ-070-数字序列中的某一位数字

 2 years ago
source link: https://segmentfault.com/a/1190000041456921
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

JZ-070-数字序列中的某一位数字

发布于 2 月 24 日

数字序列中的某一位数字

数字以 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';
    }
}

【每日寄语】 养不教,父之过;教不严,师之惰。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK