-
题目链接 https://leetcode-cn.com/problems/permutations-ii/submissions/
-
题目描述
- 给定一个可包含重复数字的序列,返回所有不重复的全排列。
-
输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ]
-
解题思路
- 本题关键在于去重,可以通过排序,或者计数两种方式去重。
-
代码
- python
class Solution: def permuteUnique(self, nums): from collections import Counter N = len(nums) nums = Counter(nums) ans = [] def _dfs(index, res): nonlocal nums if index == N: return ans.append(res) for num, count in nums.items(): if count: #去重 nums[num] -= 1 _dfs(index + 1, res + [num]) nums[num] += 1 _dfs(0, []) return ans
- c++
class Solution { vector< vector<int> > ans; public: vector<vector<int>> permuteUnique(vector<int>& nums) { sort(nums.begin(), nums.end()); _dfs(0, nums.size()-1, nums); return ans; } void _dfs(int index, int end, vector<int> nums){ if(index == end) ans.push_back(nums); else{ for (int i = index; i <= end; i++) { if (i != index && nums[i-1] == nums[i]) continue; // 去重 swap(nums[index], nums[i]); _dfs(index + 1, end, nums); } } } };
- python
leetcode 47. 全排列 II
最新推荐文章于 2024-06-20 10:06:47 发布