LC46. Permutations
给一个包含不重复元素的集合,返回其所有排列
分析:用dfs,用一个数组vis记录某个元素是否已经被使用,使用的时候 vis[i] = 1 ,回溯的时候 vis[i] = 0 ,用 idx 记录当前排列要放数据的位置
class Solution { public: vector<int> nu, vis, cur; vector<vector<int>> res; int n; void dfs(int idx) { if (idx == n) { res.push_back(cur); return; } for (int i = 0; i < n; ++i) { if (vis[i]) continue; vis[i] = 1; cur[idx] = nu[i]; dfs(idx + 1); vis[i] = 0; } } vector<vector<int>> permute(vector<int>& nums) { n = nums.size(); if (!n) return res; nu = nums; vis.assign(n, 0); cur.assign(n, 0); dfs(0); return res; } };
来源:https://www.cnblogs.com/betaa/p/12446910.html