数字序列中的某一位的数字

题目 #

数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数,即从第0位开始)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。

解题思路 #

  1. 可以将 n 进行拆分,1位数一共10个数字、10位,2位数一共90个数字、180位,依此类推
  2. 当确定 n 所在位数范围时,对位数取商,计算出 n 位对应的数字 a,再取余,计算出结果位于 a 的第几位
public int nOfNumberSerialize(int n) {
    int i = 1;
    int count = 0;
    int nLeft = n;

    while (true) {
        nLeft -= count;
        count = countOfIntegers(i) * i;

        if (nLeft < count) {
            break;
        }

        i++;
    }

    int a = nLeft / i;
    String s = String.valueOf(a);

    return s.charAt(nLeft % i) - '0';
}

private int countOfIntegers(int n) {
    int sum = 0;

    if (n == 1) {
        sum = 10;
    } else {
        sum = (int) (9 * Math.pow(10, n - 1));
    }

    return sum;
}