目錄
一、題目
二、示例
三、思路
四、代碼
一、題目
1、LeetCode46:給定一個 沒有重復 數字的序列,回傳其所有可能的全排列,
2、LeetCode47:給定一個可包含重復數字的序列,回傳所有不重復的全排列,
二、示例
1、LeetCode46:
輸入: [1,2,3]
輸出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
2、LeetCode47:
輸入: [1,1,2] 輸出: [ [1,1,2], [1,2,1], [2,1,1] ]
三、思路
1、LeetCode46:遞回+回溯
2、LeetCode47:遞回+回溯+去重
四、代碼
1、LeetCode46:
class Solution:
def permute(self, nums: int):
res = []
def DFS(nums, tmp):
if nums == []:
res.append(tmp)
return
for i in range(len(nums)):
DFS(nums[:i] + nums[i + 1:], tmp + [nums[i]])
DFS(nums, [])
return res
if __name__ == '__main__':
test = [1,2,3]
ans = [
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
s = Solution()
res = s.permute(test)
print('test:', test)
print('ans:', ans)
print('res:', res)
2、LeetCode47:(該代碼也可用于LeetCode46)
class Solution:
def permuteUnique(self, nums):
res = []
nums.sort()
def DFS(num, tmp):
if num == []:
res.append(tmp)
return
for i in range(len(num)):
if i > 0 and num[i - 1] == num[i]:
continue
DFS(num[: i] + num[i + 1: ], tmp + [num[i]])
DFS(nums, [])
return res
if __name__ == '__main__':
test = [1,1,2]
ans = [
[1,1,2],
[1,2,1],
[2,1,1]
]
s = Solution()
res = s.permuteUnique(test)
print('test:', test)
print('ans:', ans)
print('res:', res)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/89532.html
標籤:其他
上一篇:小白求帶
