Given a list of numbers, return all possible permutations.给定一个整数数组,返回所有可能的排列,假定数组中的元素不重复
思路一个元素一个元素的处理,将新的元素插入到先前元素可能排列的空隙中。例如对数组[1,2,3]来说,首先处理第一个元素1,可能的排列只有一个即[1],第二个元素2插入到[1]中有两种情况即[1,2],[2,1].最后第三个元素3插入到以上两个情况中,有[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]。
代码:
vector<vector<int>> permute(vector<int> &nums) { // write your code here // write your code here vector<int> tmp; vector<vector<int>> res; vector<vector<int>> res_save,res_temp; int i=1,k=0; if(nums.size()==1){//只有一个元素和为空时返回本身 res.push_back(nums); return res; } if(nums.empty()){ res.push_back(nums); return res; } tmp.push_back(nums[0]); res.push_back(tmp); while(i<nums.size()){ res_save.clear(); res_temp.clear(); res_save=res; res_temp=res; res.clear(); for(int j=0;j<res_temp.size();j++){//遍历当前结果中所有的排列 while(k<=res_temp[j].size()){//将新的元素插入到指定位置 res_temp[j].insert(res_temp[j].begin()+k,nums[i]); res.push_back(res_temp[j]); res_temp.clear(); res_temp=res_save; k++; } k=0; } i++; } return res; }