Nth Digit

本文提供了一个解决LeetCode上Nth Digit问题的有效方法。通过解析数字位数及位置,利用数学公式快速定位目标数字,并附带清晰的Python代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目详情:https://leetcode.com/problems/nth-digit/description/

终于做对了。思路挺简单的,就是一个地方没想明白,当有余数的时候,应该是第n+1个数;余数为0的时候为第n个数,体现在代码中为:

        if m==0: #如果余数为0,则是第n个数
            x=n+pow(10,i)-1 #比如10是两位数中的第一个数,11是第二个数
        else: #余数不为0的情况,则是第n+1个数
            x=n+pow(10,i) #得到数字

10为两位数中的第一个数,11为第二数,以此类推。

# -*- coding:utf-8 -*-
class Solution(object):
    def findNthDigit(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n<=9:  #n<=9的话,那么直接返回
            return n
        s,i=0,0 #s存储数的个数。比如:10是两个数
        base=9
        while s<n:
            #base*pow(10,i)为(i+1)位数的个数,比如:2位数(10-99)的个数为90个数
            #base*pow(10,i)*(i+1)为(i+1)位数中数的个数
            #比如:2位数一共有90个数,数字的个数位90*2=180
            s=s+base*(i+1)
            base=base*10
            i=i+1
        i=i-1 #多加了一次1,减掉
        s=s-base/10*(i+1) #s也多加,减掉
        n=n-s #n减掉s,例如:n=30,s为9。n=n-s=21
        m=n%(i+1) #n对i+1,即位数,取余
        n=n/(i+1) #n除以位数,得到第几个数
        if m==0: #如果余数为0,则是第n个数
            x=n+pow(10,i)-1 #比如10是2两位数中的第一个数,11是第二个数
        else: #余数不为0的情况,则是第n+1个数
            x=n+pow(10,i) #得到数字
        digits=[] #存储各个位的位数
        while x!=0: #得到各个位上的数
            digits.append(x%10)
            x=x/10
        if m==0: #如果m==0,那么为个数数字
            return digits[0]
        return digits[len(digits)-m]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值