美文网首页快乐写代码
T400、第N个数字

T400、第N个数字

作者: 上行彩虹人 | 来源:发表于2020-06-18 22:10 被阅读0次

在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...中找到第 n 个数字。
注意:
n 是正数且在32位整数范围内 ( n < 231)。
示例 1:
输入:
3
输出:
3
示例 2:
输入:
11
输出:
0
说明:
第11个数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是0,它是10的一部分。

通过观察发现:
一位数个数:9
两位数个数:90 * 2
三位数个数:90 * 3
所以解题思路为先判断是多到位数,在定位到具体是那个数字,最后在判断是在数字中的那个位置。

    public int findNthDigit(int n) {
        long t =  n;
        long size = 1; // 位数
        long max = 9; 
        while(n > 0 ){
            if (t - max * size > 0){
                t = t - max * size;
                max = max * 10;
                size++;
            }else{
                long num = t / size;
                long left = num % size;
                if(0 == left)
                    return (int) (((long) Math.pow(10,size-1)-1 + num) % 10);
                else
                    return (int) (((long)Math.pow(10, size-1)+num)/((long)Math.pow(10, (size-left)))%10);
            }
        }
        return 0;
    }

相关文章

网友评论

    本文标题:T400、第N个数字

    本文链接:https://www.haomeiwen.com/subject/tvvpxktx.html