- 一、题目
- 二、分析及代码
- 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
根据规律,先确定第 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% 的用户。
暂无。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)