#include<iostream>
#include<string>
#include<vector>
using namespace std;
class Solution {
public:
vector<vector<int>> permute(int nums) {
vector<vector<int>>res;
dfs(res, nums-1, {{nums}});
return res;
}
void dfs(vector<vector<int>>& res, int num, vector<vector<int>>re) {
if (num == 0)
return;
vector<vector<int>>peli;
for (int j = 0; j < re.size(); j++) {
vector<int>tmp(re[j]);
for (int i = 0; i < 5 - num + 1; i++) {
tmp.insert(tmp.begin() + i, num);
peli.push_back(tmp);
}
}
dfs(res, num - 1, peli);
if (num == 1)
res = peli;
}
};
int main() {
Solution a;
vector<vector<int>>ok;
ok=a.permute(5);
for (int i = 0; i < ok.size(); i++) {
for (int j = 0; j < 5; j++) {
cout << ok[i][j] << " ";
}
cout << endl;
}
}
输出1-5的排列组合
思路:初始re数组只有5,利用递归,先将4插入到数组中、然后插入3,2,1
问题出在哪里
20 21行,tmp要恢复原始
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
class Solution {
public:
vector<vector<int>> permute(int nums) {
vector<vector<int>> res;
vector<int> tmp;
vector<int> numsList;
for (int i = 1; i <= nums; i++) {
numsList.push_back(i);
}
dfs(res, numsList, tmp);
return res;
}
void dfs(vector<vector<int>>& res, vector<int>& numsList, vector<int>& tmp) {
if (tmp.size() == numsList.size()) {
res.push_back(tmp);
return;
}
for (int i = 0; i < numsList.size(); i++) {
if (find(tmp.begin(), tmp.end(), numsList[i]) == tmp.end()) {
tmp.push_back(numsList[i]);
dfs(res, numsList, tmp);
tmp.pop_back();
}
}
}
};
int main() {
Solution a;
vector<vector<int>> ok;
ok = a.permute(5);
for (int i = 0; i < ok.size(); i++) {
for (int j = 0; j < 5; j++) {
cout << ok[i][j] << " ";
}
cout << endl;
}
return 0;
}
这题是经典DFS,你可以看看我的博客,全排列问题
#include<iostream>
#include<string>
#include<vector>
using namespace std;
class Solution {
public:
vector<vector<int>> permute(vector<int> nums) {
vector<vector<int>> res;
dfs(res, nums.size(), {{nums}}, nums);
return res;
}
void dfs(vector<vector<int>>& res, int num, vector<vector<int>> re, vector<int> nums) {
if (num == 0)
return;
if (num == 1) {
for (auto v : re) {
res.push_back(v);
}
return;
}
vector<vector<int>> peli;
for (int j = 0; j < re.size(); j++) {
vector<int> tmp = re[j];
for (int i = 0; i < nums.size() - num + 1; i++) {
tmp.insert(tmp.begin() + i, num);
peli.push_back(tmp);
tmp = re[j];
}
}
dfs(res, num - 1, peli, nums);
}
};
int main() {
Solution a;
vector<vector<int>> ok;
ok = a.permute({1,2,3,4,5});
for (int i = 0; i < ok.size(); i++) {
for (int j = 0; j < 5; j++) {
cout << ok[i][j] << " ";
}
cout << endl;
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话: