400. 第N个数字(没看懂题目...未完)

这道题的题目意思...emmm....;

1,2,3,4,5,6,7,8,9,10 只有这10种而已。(21也是0)

别人的解题思路 

解题参考的:(这真的是简单题吗??怀疑人生)

https://blog.csdn.net/hy971216/article/details/80724403

https://blog.csdn.net/Aurora_ym/article/details/81904133

# 这里首先分析一下位数和规律
# 个位数:1-9,一共9个,共计9个数字
# 2位数:10-99,一共90个,共计180个数字
# 3位数:100-999,一共900个,共计270个数字
# 4位数,1000-9999,一共9000个,共计36000个数字
# 以此类推,
# 这样我们就可以首先定位到是哪个数,再找到其对应的数字
class Solution(object):
    def findNthDigit(self, n):
        """
        :type n: int
        :rtype: int
        """
        length = 1
        base = 1
        while(n>9*length*base):
            n -= 9*length*base
            length+=1
            base*=10
        # print(n) # 2
        # e.g. 二位数的第一个数字,是10
        curNum = (n-1)//length+base # 将数字还原,11(th)指向的是10,还原10;
        # print(curNum) # 10
        # 判断是11(th)指向的是数10的第几位,即指向的是0还是1;
        # 如果指向的是第0位,则是1;指向第1位,则是0;
        point = (n-1)%length # 指向第0位,还是第1位
        # print(point)
        digit = 0
        while (point<length):
            # print(i) # 0,1 (如果是2位数)
            digit =  curNum%10 # 个位数
            curNum //= 10 # 十位数
            point += 1
            # print(digit)
            # print(curNum)
        return digit

方法2:(我好笨)

class Solution(object):
    def findNthDigit(self, n):
        """
        :type n: int
        :rtype: int
        """
        for i in range(1, 10):
            if n - 9 * 10 ** (i - 1) * i <= 0:
                k = i
                break
            else:
                n -= 9 * 10 ** (i - 1) * i
        base = 10 ** (k - 1)
        str_n = str(base + (n - 1) // k)
        return (int(str_n[(n-1) % k]))

草稿。。。怕之后忘记了 

猜你喜欢

转载自blog.csdn.net/weixin_31866177/article/details/84030267
今日推荐