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

题目44. 数字序列中某一位的数字

在这里插入图片描述

思路
若想要求第n位:

  • 先求第n位所在的数字num的位数digit,比如第11位所在的数字num10,位数为2
  • 求所在的数字num;
  • 求所在num的第几位;

题解

class Solution {
    /**
     * 若想求第n位
     * 1.先求第n位所在的数字num的位数digit
     * 2.求所在的数字num
     * 3.求所在num的第几位
     */
    public int findNthDigit(int n){
        //初始化
        int digit = 1;  //位数
        long start = 1; //每个digit开始的数字
        long count = 9; //在digit位数中数位的数量=9*start*digit
        
        //1.求所在num的位数digit
        while(n>count){    //说明n所在num比之前的位数digit大
            n -= count;   //减去上一个位数的数位的总和
            digit ++;
            start *= 10;
            count = 9*start*digit;
        }
        /**
         * 目前的n是已经减去了比它小的位数的总和
         * 比如n为15的话,指向的是12数字的2,那么此时的n则为15-9=6
         */
        //2.求所在的数字num
        long num = start + (n-1)/digit;
        //3.求所在num的第几位
        int i = (n-1)%digit;
        return Long.toString(num).charAt(i) - '0';
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值