(M)Backtracking:46. Permutations

来源:互联网 发布:慈溪行知职高在哪 编辑:程序博客网 时间:2024/06/05 00:59

输出给定数组的所有全排列。

这道题还是比较简单的回溯。根据上一篇216Combination Sum3的经验,这次是要输出给定数组的所有全排列,要用到一个visit数组来标识哪些数现在是可以选的。

class Solution {public:    vector<vector<int>> permute(vector<int>& nums) {        vector<vector<int>> res;        vector<int> visit(nums.size(), 0);        vector<int> r;        backtracking(nums, visit, r, res);        return res;    }    void backtracking(vector<int>& nums, vector<int>& visit, vector<int>& r, vector<vector<int>>& res)    {        if(r.size() == nums.size())        {            res.push_back(r);            return;        }        for(int i = 0; i < nums.size(); ++i)        {            if(visit[i] == 0)            {                r.push_back(nums[i]);                visit[i] = 1;                backtracking(nums, visit, r, res);                r.erase(--r.end());                visit[i] = 0;            }        }    }    };