[LeetCode] Permutations

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],
  [3,2,1]
]

写出给定数组的全排列。使用递归的思想

思路:将第一个数组元素固定,然后对其后的所有元素递归,交换元素构成排列。每当交换到最后一个元素时,将这个数组放去结果二维数组中即可。

class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int>> res;
        permuteCore(nums, 0, res);
        return res;
    }
    
    void permuteCore(vector<int>& num, int bg, vector<vector<int>>& res) {
        if (bg >= num.size()) {
            res.push_back(num);
            return;
        }
        for (int i = bg; i != num.size(); i++) {
            swap(num[bg], num[i]);
            permuteCore(num, bg + 1, res);
            swap(num[bg], num[i]);
        }
    }
};
// 9 ms
原文地址:https://www.cnblogs.com/immjc/p/7567153.html