典型搜索题,搜索题主要有两个,Subsets子集和Permutation全排列。
模板题,递归搜索,要注意记忆模板,遇到相似题改写即可。
class Solution {
public:
/*
* @param nums: A list of integers.
* @return: A list of permutations.
*/
vector<vector<int>> permute(vector<int> &nums) {
vector<vector<int> > result;
vector<int> permutation;
if (nums.empty()) {
result.push_back(permutation);
return result;
}
vector<bool> used(nums.size(), false);
helper(result, permutation, nums, used);
return result;
}
void helper(vector<vector<int>> &result,
vector<int> &permutation,
vector<int> &nums,
vector<bool> used) {
if (permutation.size() == nums.size()) {
result.push_back(permutation);
return;
}
for (int i = 0; i < nums.size(); i++) {
if (used[i]) {
continue;
}
used[i] = true;
permutation.push_back(nums[i]);
helper(result, permutation, nums, used);
permutation.pop_back();
used[i] = false;
}
}
};