在枚举排列或者集合时,要注意:
1、排列(序列):序列中的各元素是有相对顺序的,所以允许两个序列或排列的元素完全相同,因为相对顺序不同表示的意义不同,允许回头去遍历但要看题目要求看是否允许元素的重复使用(借助一个boolean[]used来标记)
2、集合:集合内的元素没有相对顺序这么一说,所以不允许两个集合内容完全一样,也就是不能回头重新遍历生成,要每次从下一个位置去生成(借助要一个start标志位)
case1:暴力回溯+减枝
3、当原集合或序列有重复元素时,要借助排序(使原数组或者集合先有序)再借助一个boolean[]used 结合
if(i>start(当允许回头重新遍历时,start变为0)&&nums[i]==nums[i-1]&&!used[i-1]) continue;
4、理解题意再动手,可以先画树状图来方便理解
使用回溯法生成全排列(所有子集)的几个注意点
最新推荐文章于 2023-03-17 11:09:03 发布