LeetCode——400. 第 N 位数字(Nth Digit)[中等]——分析及代码(C++)

LeetCode——400. 第 N 位数字(Nth Digit)[中等]——分析及代码(C++),第1张

LeetCode——400. 第 N 位数字(Nth Digit)[中等]——分析及代码(C++)

LeetCode——400. 第 N 位数字[Nth Digit][中等]——分析及代码[C++]
  • 一、题目
  • 二、分析及代码
    • 1. 直接计算
      • (1)思路
      • (2)代码
      • (3)结果
  • 三、其他

一、题目

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

示例 1:

输入:n = 3
输出:3

示例 2:

输入:n = 11
输出:0
解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是 0 ,它是 10 的一部分。

提示:

  • 1 <= n <= 2^31 - 1
  • 第 n 位上的数字是按计数单位(digit)从前往后数的第 n 个数,参见 示例 2 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/nth-digit
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、分析及代码 1. 直接计算 (1)思路

根据规律,先确定第 n 位对应数字的位数,再确定其数值,最后计算该数位上的数字。

(2)代码
class Solution {
public:
    int findNthDigit(int n) {
        int digit = 1;//当前处理的数字位数
        while (n > pow(10, digit - 1) * digit * 9) {//待求解的整数超出当前位数数字的区间
            n -= pow(10, digit - 1) * digit * 9;//后移整数
            digit++;//数字位数增加
        }

        int num = (n - 1) / digit + pow(10, digit - 1);//整数n对应整数序列中的数字
        return (num / (int)(pow(10, digit - (n - 1) % digit - 1))) % 10;//返回第n位的数字
    }
};
(3)结果

执行用时 :0 ms,在所有 C++ 提交中击败了 100.00% 的用户;
内存消耗 :6.1 MB,在所有 C++ 提交中击败了 22.53% 的用户。

三、其他

暂无。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5636476.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存