400. 第N个数字_面试题44. 数字序列中某一位的数字

问题
在这里插入图片描述

例子

在这里插入图片描述

思路
在这里插入图片描述

  • 方法1
    $$

    $$

    1. 确定位数【i位数共有多少位数字:10*(i-1)9i】
    2. 确定所在的数字
    3. 确定是哪一位数
  • 方法2
    $$

    $$

代码

//方法1
class Solution {
    public int findNthDigit(int n) {
        //所在数字是i位
        int i=1;
        //当n为10^9时,区间最大值>Integer.MAX_VALUE
        while(n > (long)Math.pow(10,i-1)*9*i) {
            n-=(long)Math.pow(10,i-1)*9*i;
            i++;
        }
        
        //是哪一个数字 10^(i-1)是i位数的起始数字 如:2位数 10
        //n为第几个数,n-1为下标,(n-1)/i 数坐在的下标 (n-1)%i在i长度中的下标
        long num = (int)Math.pow(10,i-1)+(n-1)/i;
        String s = String.valueOf(num);
     
        return s.charAt((n-1)%i)-'0';

    }
}
//方法2

发布了234 篇原创文章 · 获赞 9 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/puspos/article/details/105253846
今日推荐