【LeetCode】386. Lexicographical Numbers 解題報告(Python)

【LeetCode】386. Lexicographical Numbers 解題報告(Python)

標籤(空格分隔): LeetCodepython

做者: 負雪明燭
id: fuxuemingzhu
我的博客: http://fuxuemingzhu.me/app


題目地址:https://leetcode.com/problems/lexicographical-numbers/description/less

題目描述:

Given an integer n, return 1 - n in lexicographical order.ide

For example, given 13, return: [1,10,11,12,13,2,3,4,5,6,7,8,9].spa

Please optimize your algorithm to use less time and space. The input size may be as large as 5,000,000.code

題目大意

給了一個數字n,找出1~n的全部數字的字典序排列。隊列

解題方法

題目中說了輸入多是5百萬,那麼只能用O(N)的時間複雜度。ip

這個題的思路我是參考的Lexicographical Numbers 字典順序的數字,不太好想。leetcode

  1. 若是curr乘以10小於等於n,那麼下個數字應該是curr末尾補0;
  2. 若是curr已經到達了n,那麼說明各位數字已經到頭了,應該變化十位數字了,因此除以10,再加一。這時可能會出現剛好進位的狀況,而字典序多是從末尾沒有0的數字開始的,因此要把末尾的0去掉。

好比n=300時,會有這個隊列1,10,100,101,102...198,199,2,20,200,201...299,3,30,300get

代碼以下:

class Solution:
    def lexicalOrder(self, n):
        """ :type n: int :rtype: List[int] """
        cur = 1
        ans = []
        for i in range(n):
            ans.append(cur)
            if cur * 10 <= n:
                cur *= 10
            else:
                if cur >= n:
                    cur //= 10
                cur += 1
                while cur % 10 == 0:
                    cur //= 10
        return ans

日期

2018 年 8 月 17 日 ———— 別人七夕,我在刷題。。

相關文章
相關標籤/搜索