一、題目描述
給定一個 沒有重複 數字的序列,傳回其所有可能的全排列。
示例:
輸入: [1,2,3]
輸出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
二、解題思路 & 代碼
def permute(nums):
res = []
def backtrack(nums, tmp):
if not nums:
res.append(tmp)
return
for i in range(len(nums)):
backtrack(nums[:i] + nums[i+1:], tmp + [nums[i]])
backtrack(nums, [])
return res
if __name__ == '__main__':
nums = [1,2,3]
print(permute(nums))
# [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
- 時間複雜度:,其中 n 為序列的長度
- 空間複雜度:,其中 n 為序列的長度。除答案數組以外,遞歸函數在遞歸過程中需要為每一層遞歸函數配置設定棧空間,是以這裡需要額外的空間且該空間取決于遞歸的深度,這裡可知遞歸調用深度為 。
參考:
- LeetCode題解