每日leetcode 46 2020-04-23

2020-04-26  本文已影响0人  五道口的程序狐

46. 全排列

给定一个没有重复 数字的序列,返回其所有可能的全排列。

示例:

输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]

用一个vector来表示当前选择了哪些,用一个vector表示谁被选中了(避免检查某一个数是不是合理的时候用太长的时间搜索)。

class Solution {

public:
    int len;

    void do_permute(vector<int>& nums, vector<int>& now, vector<vector<int>>& ans, int i, vector<bool>& used) {
        if (i == len) {
            ans.push_back(vector<int>(now));
        }
        else {
            for (int k = 0; k < len; k++) {
                if (!used[k]) {
                    used[k] = true;
                    now[i] = nums[k];
                    do_permute(nums, now, ans, i + 1, used);
                    used[k] = false;
                }
            }
        }
    }

    vector<vector<int>> permute(vector<int>& nums) {
        len = nums.size();
        vector<vector<int>> ans;
        vector<int> now(len, -1);
        vector<bool> used(len, 0);
        do_permute(nums, now, ans, 0, used);
        return ans;
    }
};
上一篇下一篇

猜你喜欢

热点阅读