day29 回溯算法part5 代码随想录算法训练营 47. 全排列 II
题目:47. 全排列 II
我的感悟:
- 用了一层判断,感觉也挺好用的
理解难点:
- 老师的写法,主要是理解used【i】 和used[i-1]的概念
- 我说怎么参考答案看不懂呢,它把两个判断放在一起写了。
我的代码:用了一层判断
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
res = []
used = [0] * len(nums)
self.backtracking(nums,[],res,used)
return res
def backtracking(self,nums,path,res,used):
if len(path) == len(nums):
if path[:] not in res:
res.append(path[:])
return
for i in range(len(nums)):
if used[i] == 1:
continue
path.append(nums[i])
used[i] = 1
self.backtracking(nums,path,res,used)
used[i] = 0
path.pop()
通过截图:
老师的写法:
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
res = []
used = [0] * len(nums)
nums.sort()
self.backtracking(nums,[],res,used)
return res
def backtracking(self,nums,path,res,used):
if len(path) == len(nums):
res.append(path[:])
return
for i in range(len(nums)):
# 1.跳过树层 重复
if i> 0 and nums[i] == nums[i-1] and used[i-1] == 0:
continue
# 2.跳过树枝 重复 (跳过上一个重复项)
if used[i] ==1:
continue
path.append(nums[i])
used[i] = 1
self.backtracking(nums,path,res,used)
used[i] = 0
path.pop()
老师这个的通过截图:
资料:
47.全排列 II
本题 就是我们讲过的 40.组合总和II 去重逻辑 和 46.全排列 的结合,可以先自己做一下,然后重点看一下 文章中 我讲的拓展内容。 used[i - 1] == true 也行,used[i - 1] == false 也行
https://programmercarl.com/0047.%E5%85%A8%E6%8E%92%E5%88%97II.html