LeetCode:Permutations


Permutations
Total Accepted: 81338 
Total Submissions: 239466 
Difficulty: Medium
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] .
Subscribe to see which companies asked this question
Hide Tags
 
Backtracking
まず、全配列の由来を説明します.
例の数字の組み合わせ123は、123、213、231、321、312、132の6種類の全配列である.
まず213と321を見て、123のうちの1が後の2桁と交換された結果である.
231と312はそれぞれ213と321後の2桁交換後の結果である.
そのため、全ランキングは1位から後の方と交換したものです.
code:
class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int>> res;
        permute(res, nums, 0);
        return res;
    }
    void permute(vector<vector<int>> &res, vector<int> &nums, int pos) {
        if(pos == nums.size()) {
            res.push_back(nums);
            return;
        }
        for(int i=pos;i<nums.size();i++) {
            swap(nums[pos], nums[i]);
            permute(res, nums, pos + 1);
            swap(nums[pos], nums[i]);
        }
    }
};