原题
LeetCode 46. 全排列
思路
- 以数组中某个元素出发,用exist数组存储是否遍历,tmp存储当前遍历结果,每次都遍历前面未遍历过的,当遍历结果等于nums数组长度时,把tmp存入ans中
代码
class Solution {
public:
vector<bool> exist;
vector<vector<int>> ans;
vector<int> tmp;
void search(vector<int>& nums, int i) {
exist[i] = true;
tmp.push_back(nums[i]);
if (tmp.size() == nums.size()) ans.push_back(tmp);
for (int j = 0; j < nums.size(); j++) {
if (exist[j] == false) search(nums, j);
}
exist[i] = false;
tmp.pop_back();
}
vector<vector<int>> permute(vector<int>& nums) {
int n = nums.size();
exist.resize(n);
for (int i = 0; i < n; i++) search(nums, i);
return ans;
}
};
运行截图
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6a55402f177f8f2e9661f9cb3b4616ab.png)
收获