概述
400. 第 N 位数字
给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …] 中找出并返回第 n 位数字。
示例 1:
输入:n = 3
输出:3
示例 2:
示例 1:
输入: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-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. 第 N 位数字所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复