我是靠谱客的博主 搞怪蜜粉,最近开发中收集的这篇文章主要介绍【力扣题解】400. 第 N 位数字,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

????博主目前也在学习,有错误欢迎指正????
????保持热爱 奔赴星海????

文章目录

    • 一、题目
      • 1、题目描述
      • 2、基础框架
      • 3、原题链接
    • 二、解题报告
      • 1、思路分析
      • 2、代码详解
    • 三、本题知识

一、题目

1、题目描述

给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …] 中找出并返回第 n 位上的数字。

2、基础框架

  • Java版本框架代码如下:
class Solution {
    public int findNthDigit(int n) { 
     
    }
}

3、原题链接

400. 第 N 位数字

二、解题报告

1、思路分析

       (1)通过观察我们可以知道,当数字为一位数时,即在(1~9之间)有九个数,当数字为两位数(即10~99之间)有90个数,以此类推。所以我们只需要在遍历的时候把当数字为某位数时的个数乘以位数减掉就可以判断出第n位数为几位数了。
       (2)在循环结束后,剩下的那个n就代表在这个范围中n在第几个数中,即可以定位到这个数。通过取余就可以计算出第n位位于这个数的第几位。其他数的含义见代码注释。
       (3)

2、代码详解

class Solution {
    public int findNthDigit(int n) {  
        int d = 1,count = 9;
        while (n > (long)d*count){
            n-=d*count;
            d++;
            count *= 10;
        }
        /**
	        d表示几位数,index表示在这个范围里面第几位
	        num表示在这个数是哪个
	        digitIndex表示在这个数里面的第几位
	        num / (int)(Math.pow(10,d -digitIndex -1)可以把digitIndex后的数字截掉
	        对10取余可以把digitIndex位取出来,就是结果
         */
        int index =n -1;
        int start = (int)Math.pow (10,d -1);
        int num = start + index/d;
        int digitIndex  = index % d;
        int digit = (num / (int)(Math.pow(10,d -digitIndex -1)))%10;
        return digit;
    }
}

三、本题知识

数学归纳

最后

以上就是搞怪蜜粉为你收集整理的【力扣题解】400. 第 N 位数字的全部内容,希望文章能够帮你解决【力扣题解】400. 第 N 位数字所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部