LeetCode-46-全排列 发表于 2020-03-15 | 分类于 LeetCode | 评论数: | 热度: ℃ 本文字数: 5.3k | 阅读时长 ≈ 5 分钟 给定一个没有重复数字的序列,返回其所有可能的全排列。 示例: 12345678910输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]] Code1234567891011121314151617181920212223242526272829303132333435363738394041424344454647//有两种思路://1.每个位置可以放的数//2.枚举当前数可放哪些位置//实践复杂度O(N^2)//空间复杂度O(N)class Solution {private: vector<vector<int>> res;public: vector<vector<int>> permute(vector<int>& nums) { vector<int> cs; int length = nums.size(); if (length==0|| length==1) { res.push_back(nums); return res; } //访问标记位,解决每次从数组中复制新数组,复杂度保持不变 int *visited = new int[length]; for (int i = 0;i < length;i++) visited[i] = 0; DFS(nums, nums.size(), cs, visited); return res; } void DFS(vector<int>& nums,int length,vector<int>& cs,int* visited){ if (length == 0) { res.push_back(cs); return; } for (int i = 0;i < nums.size();i++) { //迭代过程中查看是否以访问 if (!visited[i]) { cs.push_back(nums[i]); visited[i] = 1; //继续递归 DFS(nums, length - 1, cs, visited); //注意清空之前操作的数,避免对同层造成影响 visited[i] = 0; cs.pop_back(); } } }}; 相关文章推荐 LeetCode-130-被围绕的区域 LeetCode-131-分割回文串 LeetCode-200-岛屿数量 LeetCode-216-组合总和III LeetCode-40-组合总和II ----\(˙<>˙)/----赞赏一下吧~ 打赏 微信支付 支付宝 本文作者: wicherQAQ 本文链接: https://wicherqaq.github.io/2020/03/15/LeetCode-46-%E5%85%A8%E6%8E%92%E5%88%97/ 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!