????博主目前也在学习,有错误欢迎指正????
????保持热爱 奔赴星海????
文章目录
- 一、题目
- 1、题目描述
- 2、基础框架
- 3、原题链接
- 二、解题报告
- 1、思路分析
- 2、代码详解
- 三、本题知识
一、题目
1、题目描述
给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …] 中找出并返回第 n 位上的数字。
2、基础框架
- Java版本框架代码如下:
复制代码
1
2
3
4
5
6class Solution { public int findNthDigit(int n) { } }
3、原题链接
400. 第 N 位数字
二、解题报告
1、思路分析
(1)通过观察我们可以知道,当数字为一位数时,即在(1~9之间)有九个数,当数字为两位数(即10~99之间)有90个数,以此类推。所以我们只需要在遍历的时候把当数字为某位数时的个数乘以位数减掉就可以判断出第n位数为几位数了。
(2)在循环结束后,剩下的那个n就代表在这个范围中n在第几个数中,即可以定位到这个数。通过取余就可以计算出第n位位于这个数的第几位。其他数的含义见代码注释。
(3)
2、代码详解
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25class 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.内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复