LeetCode-46-全排列
LeetCode-46-全排列
题目
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
思路
这道题和上一道题39差不多的,连代码形式也是一样的;
不一样的地方在于,38题不能往前搜索,而这道题不能重复,
所以设置一个visit指针,后续通过new改为数组,用于保存数字是否选择过;
代码
class Solution {
public:
int numsLen;
int *visit;
vector<vector<int>> ans;
void dfs(vector<int>& path, vector<int>& nums, int len) {
if (len == numsLen) {
ans.push_back(path);
return;
}
for (int i=0; i<numsLen; i++) {
if (visit[i] == 0) {
visit[i] = 1;
path.push_back(nums[i]);
dfs(path, nums, len+1);
visit[i] = 0;
path.pop_back();
}
}
}
vector<vector<int>> permute(vector<int>& nums) {
numsLen = nums.size();
if (numsLen <= 0) return ans;
visit = new int[numsLen];
memset(visit, 0, sizeof(int)*numsLen);
vector<int> path;
dfs(path, nums, 0);
return ans;
}
};