題意:
Given a collection of distinct numbers, return all possible permutations.
For example,[1,2,3]
have the following permutations:
[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
這道題目題意比較清楚,就是寫一個全排列,可以用遞歸的方法來實現,要實現n個數的全排列,也就是當實現n-1個數的排列,再這樣逐層遞歸下去。
這時可以採用這用一種策略,先固定第一個數,實現後n-1個數的排列,然後再不斷地將後面的數和第一個數交換,最後即可實現全排列。
舉個實例實現三個數的全排列,先固定第一個數1,實現後面兩個數的排列,再將2和1交換,再實現後面兩個數的排列,最後再講3放到首位,再實現後面兩個數的排列
接下來是一種c++的實現
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
vector<vector <int> > permute(vector<int>& nums) {
vector<vector<int> > v;
int n = 0;
Permutation(nums,v,n);
return v;
}
void Permutation(vector<int>& nums, vector<vector<int> > &v, int n) {
if(n == nums.size()) {
v.push_back(nums);
} else {
for(int i = n; i < nums.size(); i++) {
swap(nums[i],nums[n]);
Permutation(nums,v,n+1);
swap(nums[i],nums[n]);
}
}
}
};