剑指 Offer 题解44. 数字序列中某一位的数字

剑指 Offer 44. 数字序列中某一位的数字

class Solution {
    public int findNthDigit(int n) {
        // 1位数有10个
        // 2位数有90个
        // 3位数有900个
        int digit = 1;//数字位数(例如三位数digit=3)
        long start = 1;//digit位数的第一个数字
        long count = 9;//所有digit位数所占的位数
        while(n > count) {//找到是几位数
            n -= count;
            
            digit += 1;
            start *= 10;
            count = digit * start * 9;
        }
        long num = start + (n - 1) / digit;//几位数的第几个
        return Long.toString(num).charAt((n - 1) % digit) - '0';//确定n是num的第几位
    }
}

你可能感兴趣的:(leetcode,算法,动态规划)