题意:
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]); } } } };