LeetCode-47-全排列II 发表于 2020-03-16 | 分类于 LeetCode | 评论数: | 热度: ℃ 本文字数: 4.3k | 阅读时长 ≈ 4 分钟 给定一个可包含重复数字的序列,返回所有不重复的全排列。 示例: 1234567输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]] Code1234567891011121314151617181920212223242526272829303132333435//Time O(n!+logN)//Space O(n+n)class Solution {private: vector<vector<int>> res;public: //每个数可以出现的位置 vector<vector<int>> permuteUnique(vector<int>& nums) { sort(nums.begin(),nums.end()); vector<bool> used(nums.size(),false); vector<int> cs(nums.size()); DFS(0,0,nums,cs,used); return res; } //index为cs数组中的位置 void DFS(int index,int start,vector<int>& nums,vector<int>& cs,vector<bool>& used){ if(index==cs.size()){ res.push_back(cs); return; } //枚举当前数可以放在哪些位置 for(int i=start;i<nums.size();i++){ if(!used[i]){ used[i]=true; cs[i] = nums[index]; //若后一个数与前一个数相同,则后一个数只能放到该数的后面 if(index+1<nums.size()&&nums[index+1]==nums[index]) DFS(index+1,i+1,nums,cs,used); else DFS(index+1,0,nums,cs,used); used[i]=false; } } }}; 相关文章推荐 LeetCode-130-被围绕的区域 LeetCode-131-分割回文串 LeetCode-200-岛屿数量 LeetCode-216-组合总和III LeetCode-40-组合总和II ----\(˙<>˙)/----赞赏一下吧~ 打赏 微信支付 支付宝 本文作者: wicherQAQ 本文链接: https://wicherqaq.github.io/2020/03/16/LeetCode-47-%E5%85%A8%E6%8E%92%E5%88%97II/ 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!