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

概述

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<=2311

题解

// 区间    数字个数   所占位数
//  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 位数字所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部