-
LeetCode 46. 全排列
思路:for循环从0开始,记录used[ ]。 -
LeetCOde 47. 全排列 II
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
思路:将nums排序,剪枝的关键是for循环中![used] && nums[i] != nums[i-1]。
如果used[i-1],代表是递归下去的,即纵向的重复不会影响结果。
如果!used[i-1],代表是for循环同一级的,即横向的重复会影响结果。
- LeetCOde 39. 组合总和
给定一个无重复元素的正整数数组 candidates 和一个正整数 target ,找出 candidates 中所有可以使数字和为目标数 target 的唯一组合。candidates 中的数字可以无限制重复被选取。如果至少一个所选数字数量不同,则两种组合是唯一的。
思路:candidates 中的数字可以无限制重复被选取。但是[1,1,6]和[6,1,1]是相同的,所以在dfs的下一层不能重复选取前面的元素,所以传递i。
- LeetCOde 39. 组合总和II
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。
注意:解集不能包含重复的组合。
因为candidates 中有重复数字且每个数字在每个组合中只能使用一次。所以先排重,然后去重同“2”,最后传递i+1.