Skip to content

Latest commit

 

History

History
66 lines (65 loc) · 1.63 KB

Permutations.md

File metadata and controls

66 lines (65 loc) · 1.63 KB

#Permutations ##Problem: Given a collection of distinct 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]. ##Idea: Backtracking

class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        vector<bool> used(nums.size());
        vector<int> current;
        vector<vector<int>> result;
        helper(result,current,nums,used);
        return result;
    }
private:
    void helper(vector<vector<int>>& result,vector<int>& current,vector<int>& nums,vector<bool>& used)
    {
        if(current.size()==nums.size()) result.push_back(current);
        else 
        {
            for(int i=0;i<nums.size();i++)
            {
                if(used[i]==0)
                {
                    used[i]=1;
                    current.push_back(nums[i]);
                    helper(result,current,nums,used);
                    used[i]=0;
                    current.pop_back();
                }
            }
        }
    }
};

##To Study: Use swap

class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int>> result;
        helper(nums,result,0);
        return result;
    }
private:
    void helper(vector<int>& nums,vector<vector<int>>& result,int begin)
    {
        if(begin==nums.size()) result.push_back(nums);
        else
        {
            for(int i=begin;i<nums.size();i++)
            {
                swap(nums[begin],nums[i]);
                helper(nums,result,begin+1);
                swap(nums[begin],nums[i]);
            }
        }
    }
};