LeetCode

来源:互联网 发布:linux history文件 编辑:程序博客网 时间:2024/06/06 19:52

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]]


求一个数列的全排列。

直接dfs即可。时间复杂度O(n^2),空间复杂度O(n)

class Solution {public:    vector<vector<int>> permute(vector<int>& nums) {        vector<vector<int> > ans;        if (nums.empty()) return ans;        sort(nums.begin(), nums.end());        vector<int> cur;        vector<bool> vis(nums.size(), false);        dfs(ans, nums, cur, vis);        return ans;    }        void dfs(vector<vector<int> >& ans, vector<int>& nums, vector<int>& cur, vector<bool>& vis) {        if (cur.size() == nums.size()) {            ans.push_back(cur);            return;        }        for (int i = 0; i < nums.size(); ++i) {            if (vis[i]) continue;            vis[i] = true;            cur.push_back(nums[i]);            dfs(ans, nums, cur, vis);            cur.pop_back();            vis[i] = false;        }        return;    }};

原创粉丝点击