定义
- 排列组合的核心是Backtracking
- 把目前结点的修改还原,遍历每一种目前节点值的可能性
- 两种情况:修改最后一位输出;修改访问标记
pos
跟踪可能性的坐标,level
跟踪已经确定的位数
典型题
46. Permutations
- 回溯函数
backtracking(vector<int>& nums, int level, vector<vector<int>>& ans)
nums
:原数组,level
:前这么多位不动,ans
:存答案- base case:
level == nums.size() - 1
- 循环:从
i = level
开始,交换nums[i]
和nums[level]
(切记不是level + 1
)+ backtracking + 交换回来
77. Combinations
- 回溯函数
backtracking(vector<vector<int>>& ans, vector<int>& curComb, int& level, int pos, int n, int k)
level
:前这么多位不动,pos
:前一位的数,所以循环中遍历到的数都要比前面的大