In this post, we are going to solve the Permutations II Leetcode Solution problem of Leetcode. This Leetcode problem is done in many programming languages like C++, Java, and Python.

Problem
Given a collection of numbers, nums
, that might contain duplicates, return all possible unique permutations in any order.
Example 1:
Input: nums = [1,1,2] Output: [[1,1,2], [1,2,1], [2,1,1]]
Example 2:
Input: nums = [1,2,3] Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
Constraints:
1 <= nums.length <= 8
-10 <= nums[i] <= 10
Now, let’s see the leetcode solution of Permutations II Leetcode Solution.
Permutations II Leetcode Solution in Python
class Solution: def permuteUnique(self, nums: List[int]) -> List[List[int]]: ans = [] used = [False] * len(nums) def dfs(path: List[int]) -> None: if len(path) == len(nums): ans.append(path.copy()) return for i, num in enumerate(nums): if used[i]: continue if i > 0 and nums[i] == nums[i - 1] and not used[i - 1]: continue used[i] = True path.append(num) dfs(path) path.pop() used[i] = False nums.sort() dfs([]) return ans
Permutations II Leetcode Solution in CPP
class Solution { public: vector<vector<int>> permuteUnique(vector<int>& nums) { vector<vector<int>> ans; sort(begin(nums), end(nums)); dfs(nums, vector<bool>(nums.size()), {}, ans); return ans; } private: void dfs(const vector<int>& nums, vector<bool>&& used, vector<int>&& path, vector<vector<int>>& ans) { if (path.size() == nums.size()) { ans.push_back(path); return; } for (int i = 0; i < nums.size(); ++i) { if (used[i]) continue; if (i > 0 && nums[i] == nums[i - 1] && !used[i - 1]) continue; used[i] = true; path.push_back(nums[i]); dfs(nums, move(used), move(path), ans); path.pop_back(); used[i] = false; } } };
Permutations II Leetcode Solution in Java
class Solution { public List<List<Integer>> permuteUnique(int[] nums) { List<List<Integer>> ans = new ArrayList<>(); Arrays.sort(nums); dfs(nums, new boolean[nums.length], new ArrayList<>(), ans); return ans; } private void dfs(int[] nums, boolean[] used, List<Integer> path, List<List<Integer>> ans) { if (path.size() == nums.length) { ans.add(new ArrayList<>(path)); return; } for (int i = 0; i < nums.length; ++i) { if (used[i]) continue; if (i > 0 && nums[i] == nums[i - 1] && !used[i - 1]) continue; used[i] = true; path.add(nums[i]); dfs(nums, used, path, ans); path.remove(path.size() - 1); used[i] = false; } } }
Note: This problem Permutations II is generated by Leetcode but the solution is provided by Chase2learn This tutorial is only for Educational and Learning purposes.
NOTE: Rotate Image