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


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

解题思路

主要思路就三步:

  • 找到n应该在几位数中
  • 找到n所在的那个数字
  • 确定n是数字中的哪一位

具体思路理解:见这篇题解

代码

class Solution {
    //找规律题
    public int findNthDigit(int n) {
        if (n <= 9){
            return n;
        }
        int digit = 1 ; //数字位数(例如三位数digit=3)
        long start = 1; //digit位数的第一个数字(0是特殊数字)
        long count = 10; //所有digit位数所占的  数位数量
        while(n>count){//1.确定n所在的数字的位数digit
            n -= count;
            digit += 1;
            start *= 10;
            count = digit*start*9;
        }
        //2. 确定n所在的数字num
        //此时n的值是相对于start的位置
        long num = start + n/digit; 
        //3. 确定n是num的第几位
        //这里引入s和c方便理解
        String s = Long.toString(num);
        char c = s.charAt(n%digit); 
        return c - '0';
    }
}

文章作者: fFee-ops
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 fFee-ops !
评论
  目录