Permutations

题目: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].

思路:

使用回溯法,一开始先进第一个,当然最后需要弹出来,回溯的必然操作,然后,我需要和我一开始的start进行交换,因为我有许多种可能性。

其实题目隐含着第几次交换的计算,就和真正人计算排列组合时候,从左往右开始数数,选择某一个,先是和第一个交换,这个时候结束了,生成新的数组或者字符串s’,下一次交换就是对s’进行交换啦。当然是从s’的start开始,当然题目中都是用nums进行表示的,为了理解,我写成nums。

本题不算特别难。

代码:

class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int> >result;

        permuteHelper(0,nums,result);
        return result;
    }

    void permuteHelper(int start,vector<int>& nums,vector<vector<int> >&result){
        if(start==nums.size()){
            result.push_back(nums);
            return;
        }
        for(int i=start;i<nums.size();i++){
            swap(nums[i],nums[start]);
            permuteHelper(start+1,nums,result);
            swap(nums[i],nums[start]);
        }
    }
};


posted @ 2015-10-23 07:28  JSRGFJZ6  阅读(161)  评论(0编辑  收藏  举报