LeetCode 400. Nth Digit

简介: 在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...中找到第 n 个数字。

v2-0bd112bfeb4130ab4420575b3b4ee0bf_1440w.jpg

Description



Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...


Note:

n is positive and will fit within the range of a 32-bit signed integer (n < 231).


Example 1:


Input:
3
Output:
3


Example 2:


Input:
11
Output:
0


Explanation:

The 11th digit of the sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... is a 0, which is part of the number 10.


描述



在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...中找到第 n 个数字。


注意:

n 是正数且在32为整形范围内 ( n < 231)。


示例 1:


输入:
3
输出:
3


示例 2:


输入:
11
输出:
0


说明:


第11个数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是0,它是10的一部分。


来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/nth-digit

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


思路


  • 位数有 1 位的数有 9 个(1-9);位数有 2 位的有 90 个(10-99);位数有 3 位的有 900 个(100-999);
  • 我们先确定 n 对应的数应该是几位数,假设确定了 n 对应的数的位数为 t;我们再确定 n 在有 t 位的所有数中的位置 p;
  • t 位数的第一个数位 x,则通过 x,p,t 可以确定题意所求;


# -*- coding: utf-8 -*-
# @Author:             何睿
# @Create Date:        2019-09-02 07:41:16
# @Last Modified by:   何睿
# @Last Modified time: 2019-09-02 07:55:03
class Solution:
    def findNthDigit(self, n: int) -> int:
        a, b, start = self.__find_index(n)
        return str(start + a - 1)[-1] if not b else str(start + a)[b - 1]
    def __find_index(self, n: int) -> (int, int, int):
        # cnt_digit:数字占用的位数
        # cnt_zone:有 cnt_digit 个位的数的个数
        # start:有 cnt_digit 个位的数的第一个数
        cnt_digit, cnt_zone, start = 1, 9, 1
        while n > cnt_zone * cnt_digit:# cnt_zone 消耗的总位数
            n -= cnt_zone * cnt_digit
            cnt_digit += 1
            cnt_zone *= 10
            start *= 10
        a, b = divmod(n, cnt_digit)
        return a, b, start

源代码文件在 这里 。·


目录
相关文章
LeetCode 233. Number of Digit One
给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。
95 0
LeetCode 233. Number of Digit One
LeetCode 19. 删除链表的倒数第N个节点 Remove Nth Node From End of List
LeetCode 19. 删除链表的倒数第N个节点 Remove Nth Node From End of List
|
Java Python
LeetCode 19:删除链表的倒数第N个节点 Remove Nth Node From End of List
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 Given a linked list, remove the n-th node from the end of list and return its head. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。
891 0
[LeetCode]--400. Nth Digit
Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, … Note: n is positive and will fit within the range of a 32-bit signed integer (n &lt; 231). Exampl
1202 0
[LeetCode] Number of Digit One
The following idea is taken from a book named 《剑指offer》 published in China. Suppose n = 271, it then breaks [1, 271] into [1, 71] and [72, 271].
756 0
|
3月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行