400. 第 N 位数字
给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …] 中找出并返回第 n 位数字。
示例 1:
复制代码
1
2
3
4输入:n = 3 输出:3 示例 2:
示例 1:
复制代码
1
2
3
4输入:n = 11 输出:0 解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是 0 ,它是 10 的一部分。
提示:
- 1 < = n < = 2 31 − 1 1 <= n <= 2^{31} - 1 1<=n<=231−1
题解
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22// 区间 数字个数 所占位数 // 1-9 9 9 * 1 // 10-99 90 90 * 2 // 100-999 900 900 * 3 class Solution { public int findNthDigit(int n) { if(n < 10) return n; int d = 1, count = 9; // d是当前一个数所占位数,count是当前区间数字个数 while(n > (long) d * count){ // 计算位数 n -= d * count; d++; count *= 10; } int idx = n - 1; // 当前区间n对应的下标 int start = (int) Math.pow(10, d - 1); // 当前区间开始数字 int num = start + idx / d; // n所在数字 int digitIdx = idx % d; // n所在数字中的位下标 int digit = (num / (int)(Math.pow(10, d - digitIdx - 1))) % 10; // 得到n对应的位数的值 return digit; } }
最后
以上就是过时季节最近收集整理的关于【力扣】400. 第 N 位数字的全部内容,更多相关【力扣】400.内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复