leetcode上回溯法的使用
17
93
131
46(全排列)
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> res;
permuteDFS(nums, 0, res);
return res;
}
void permuteDFS(vector<int>& num, int start, vector<vector<int>>& res) {
if (start >= num.size()) res.push_back(num);
for (int i = start; i < num.size(); ++i) {
swap(num[start], num[i]);
permuteDFS(num, start + 1, res);
swap(num[start], num[i]);
}
}
};
47
77(组合,记得剪枝)
class Solution {
public:
vector<vector<int>> res;
void gencombination(int n,int k,int start,vector<int> &c)
{
if(c.size()==k){
res.push_back(c);
return;
}
for(int i=start;i<=n-(k-c.size())+1;i++){
c.push_back(i);
gencombination(n,k,i+1,c);
c.pop_back();
}
return;
}
vector<vector<int>> combine(int n, int k) {
res.clear();
if(n<=0||k<=0||k>n)
return res;
vector<int> c;
gencombination(n,k,1,c);
return res;
}
};
39
40
216
78
90
401

浙公网安备 33010602011771号