lintcode学习

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;
    }

 

posted @ 2018-01-18 19:34  BingzzzZZZ  阅读(122)  评论(0编辑  收藏  举报