Given a collection of 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]
, and [3,2,1]
.
思路:这题数组的全排列,我们使用分而治之的。将数组分成两部分:第一部分为首元素,第二部分为剩下的元素。总体来说,两步走:首先求所有可能出现第一个位置的元素,即把第一个元素和后面所有的元素交换,求后面所有元素的排列。这个时候我们仍把后面的所有元素分成两部分:后面元素的第一个元素,以及这个元素后面的所有元素。然后把第一个元素逐一和它后面的字符交换。其实使用典型的递归思路。、
class Solution { private: vector<vector<int> > result; public: void Permutation(vector<int> &num,int index) { if(index==num.size()) result.push_back(num); else { for(int i=index;i<num.size();i++) { int temp=num[i]; num[i]=num[index]; num[index]=temp; Permutation(num,index+1); temp=num[i]; num[i]=num[index]; num[index]=temp; } } } vector<vector<int> > permute(vector<int> &num) { Permutation(num,0); return result; } };