栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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% 的用户。

三、其他

暂无。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/630598.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号