day29 回溯算法part5 代码随想录算法训练营 46. 全排列
题目:46. 全排列
我的感悟:
- 看不下去视频,可以先看文字讲解。看答案。带着疑问去看视频,效果会更好。
- 加油!
- ===========、
- 看了一遍视频,确实跟我想的差不多。
- 遇到used[i]就跳过。
理解难点:
- 排列,不用start_index了
- 借助used = 1来过滤掉[1,1,1]这种情况。
- 如果不加if used[i] == 1,continue 就会出现重复的。如下图:
代码示例:
class Solution:
def permute(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):
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()
通过截图:
扩展写法:
资料:
46.全排列
本题重点感受一下,排列问题 与 组合问题,组合总和,子集问题的区别。 为什么排列问题不用 startIndex
https://programmercarl.com/0046.%E5%85%A8%E6%8E%92%E5%88%97.html