用函数递归实现全排列函数next_permutation
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<algorithm>
using namespace std;
class Solution {
public:
void dfs(vector<vector<int>>& ans, vector<int>&nums, int n) {
if (n == nums.size()-1) {
return;
}
dfs(ans, nums, n + 1);
for (int i = 0; i < nums.size() - n - 1; i++) {
swap(nums[n], nums[nums.size()-1-i]);
sort(nums.begin() + n + 1, nums.end());
ans.push_back(nums);
dfs(ans, nums, n + 1);
}
return;
}
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>>ans;
sort(nums.begin(), nums.end());
ans.push_back(nums);
dfs(ans, nums, 0);
return ans;
}
};
int main() {
vector<int>nums;
while (1) {
int x;
cin >> x;
nums.push_back(x);
if (cin.get() == '\n')
break;
}
Solution s;
vector<vector<int>>ans;
ans = s.permute(nums);
cout << ans.size() << endl;
for (int i = 0; i < ans.size(); i++) {
for (int j = 0; j < ans[i].size(); j++)
cout << ans[i][j] << " ";
cout << endl;
}
return 0;
}