1. 程式人生 > >386. Lexicographical Numbers 輸出1到n之間按lexico排列的數字序列

386. Lexicographical Numbers 輸出1到n之間按lexico排列的數字序列

圖片 添加 公式 and num ica 算法思想 異常 解法

[抄題]:

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

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

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

[暴力解法]:

時間分析:

空間分析:

[優化後]:

時間分析:

空間分析:

[奇葩輸出條件]:

[奇葩corner case]:

cur * 10 + i 進位時

>n就退出

[思維問題]:

不知道怎麽做dfs:多開幾個變量,用cur記錄當前可以進位的數,0-9,加i,也0-9.

[英文數據結構或算法,為什麽不用別的數據結構或算法]:

lexico舉例時,就是for 0-9就行了

[一句話思路]:

[輸入量]:空: 正常情況:特大:特小:程序裏處理到的特殊情況:異常情況(不合法不合理的輸入):

[畫圖]:

技術分享圖片

[一刷]:

  1. 可用於遞歸的數字記錄為cur, 從1開始

[二刷]:

  1. 同一個dfs中的n和i是不變的。i變化時return換i, cur變化時return換cur。(在誰的主場return就換誰)

[三刷]:

  1. dfs寫得不熟悉啊:先添加,再進行下一步擴展,而且dfs中要寫傳遞的公式

[四刷]:

[五刷]:

[五分鐘肉眼debug的結果]:

[總結]:

[復雜度]:Time complexity: O() Space complexity: O()

[算法思想:叠代/遞歸/分治/貪心]:

[關鍵模板化代碼]:

[其他解法]:

[Follow Up]:

[LC給出的題目變變變]:

[代碼風格] :

[是否頭一次寫此類driver funcion的代碼] :

[潛臺詞] :

386. Lexicographical Numbers 輸出1到n之間按lexico排列的數字序列