http://blog.csdn.net/tuantuanls/article/details/8717262 分析的很好
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 {
public:
vector
> permute(vector
& nums) {
vector
> ret; vector
backNums=nums; if(nums.size()==1) { ret.push_back(nums); return ret; } //for(int i=0;i
> tmp=permute(nums); //一直删除,在其他的递归层次中当前值都不存在,所以要插入各个位置(如果删除一个,就恢复nums,再循环删除下一个, //到时只要插入头部即所求,因为是循环恢复删除当前过程中 删除的元素在其他的循环中会恢复包含在除去头部的任何位置 for(int j=0;j
backTmpJ=tmp[j]; for(int k=0;k<=tmp[j].size();k++){ backTmpJ=tmp[j]; backTmpJ.insert(backTmpJ.begin()+k,backNums[0]);//将移除的nums.begin()插入各个位置 ret.push_back(backTmpJ); } } //} return ret; } }; // 循环恢复删除 class Solution { public: vector
> permute(vector
& nums) { vector
> ret; vector
backNums=nums; if(nums.size()==1) { ret.push_back(nums); return ret; } for(int i=0;i
> tmp=permute(nums); for(int j=0;j