链接: https://leetcode-cn.com/problems/combinations/description/
题意
给定一个整数 n 和一个整数 k,求在 1 到 n 中选取 k 个数字的所有组合方法。
解法
比较经典的回溯dfs了,与写一个全排列类似
学习一下新的写法,在下一次搜索的时候直接传入下标
回溯的时候pop_back()
只需要一次递归执行
很巧妙的思路
1 | class Solution { |
补充一个全排列swap写法:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21class Solution {
public:
void backtrack(vector<int>& nums, vector<vector<int>>& ans, int loc) {
if (loc == nums.size() - 1) {
ans.push_back(nums);
return;
}
// 对于每一个当前位置 i 可以将其于之后的任意位置交换
// 然后继续处理位置 i+1 直到处理到最后一位
for (int i = loc; i < nums.size(); i++) {
swap(nums[i], nums[loc]);
backtrack(nums, ans, loc + 1);
swap(nums[i], nums[loc]);
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>>ans;
backtrack(nums, ans, 0);
return ans;
}
};