Perfecto:我們並不侷限於只贏下一次major冠軍
阿新 • • 發佈:2022-04-03
題目:劍指 Offer 17. 列印從1到最大的n位數
解題思路1:(非考點,不推薦這麼寫)
python無需考慮大數越界問題,直接一路輸出即可
class Solution: def printNumbers(self, n: int) -> List[int]: res = [] for i in range(1, 10 ** n): res.append(i) return res # return [i for i in range(1, 10 ** n)] # return list(range(1, 10 ** n))
優質解答:全排列遞迴求解(參考自K神)
固定高位,遞迴列印後面的數字。設定開始位start,將數字的高位0去除;設定檢測值nine,當該位到達9後,下一個數字需要進位,此時控制start-1,即前移一位,回溯時需要將nine-1回到前一位。最後在將字串轉化為int放入列表中。
class Solution: def printNumbers(self, n: int) -> List[int]: def dfs(x): if x == n: s = ''.join(num[self.start:]) if s != '0': res.append(int(s)) if n - self.start == self.nine: self.start -= 1 return for i in range(10): if i == 9: self.nine += 1 num[x] = str(i) dfs(x+1) self.nine -= 1 num, res = ['0'] * n, [] self.nine = 0 self.start = n - 1 dfs(0) return res