//给定一个 没有重复 数字的序列,返回其所有可能的全排列。
//
// 示例:
//
// 输入: [1,2,3]
//输出:
//[
// [1,2,3],
// [1,3,2],
// [2,1,3],
// [2,3,1],
// [3,1,2],
// [3,2,1]
//]
// Related Topics 回溯算法
// 👍 1142 👎 0
/*
* 46 全排列
* 2021-02-22 16:18:01
* @author oxygenbytes
*/
#include "leetcode.h"
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public:
vector<vector<int>> ans;
vector<int> cur;
vector<vector<int>> permute(vector<int>& nums) {
int n = nums.size();
vector<bool> vis(n + 1, false);
dfs(n, nums, vis);
return ans;
}
void dfs(int n, vector<int>& nums, vector<bool>& vis){
if(cur.size() == n){
ans.push_back(cur);
return ;
}
for(int i = 1;i <= n;i++){
if(!vis[i]){
cur.push_back(nums[i-1]);
vis[i] = true;
dfs(n, nums, vis);
vis[i] = false;
cur.pop_back();
}
}
}
};
//leetcode submit region end(Prohibit modification and deletion)