当前位置: 面试刷题>> 全排列Ⅱ (经典算法题500道)
### 题目描述补充
题目:**全排列 II**
给定一个可能包含重复数字的整数数组 `nums`,返回该数组所有可能的排列。
**注意**:
1. 你可以按任意顺序返回答案。
2. 数组中可能包含重复元素。
**示例 1**:
```
输入: [1,1,2]
输出:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
```
**示例 2**:
```
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
```
### PHP 代码示例
```php
function permuteUnique($nums) {
sort($nums); // 先排序,便于后续去重
$result = [];
backtrack($nums, [], $result);
return $result;
}
function backtrack(&$nums, $temp, &$result) {
if (count($temp) == count($nums)) {
$result[] = $temp;
return;
}
for ($i = 0; $i < count($nums); $i++) {
// 跳过重复元素
if ($i > 0 && $nums[$i] == $nums[$i - 1] && !in_array($nums[$i], $temp)) {
continue;
}
$temp[] = $nums[$i];
$newNums = array_diff_assoc($nums, array_slice($nums, 0, $i + 1)); // 排除已使用的元素
backtrack($newNums, $temp, $result);
array_pop($temp); // 回溯
}
}
// 测试
$nums = [1, 1, 2];
$result = permuteUnique($nums);
print_r($result);
```
### Python 代码示例
```python
from itertools import permutations
def permuteUnique(nums):
nums.sort() # 先排序
result = []
seen = set() # 用于去重
def backtrack(first=0):
if first == n and tuple(nums) not in seen:
seen.add(tuple(nums))
result.append(list(nums))
for i in range(first, n):
if i > first and nums[i] == nums[i-1]:
continue
nums[first], nums[i] = nums[i], nums[first]
backtrack(first + 1)
nums[first], nums[i] = nums[i], nums[first]
n = len(nums)
backtrack()
return result
# 测试
nums = [1, 1, 2]
print(permuteUnique(nums))
```
### JavaScript 代码示例
```javascript
function permuteUnique(nums) {
nums.sort((a, b) => a - b); // 先排序
const result = [];
const used = new Array(nums.length).fill(false);
function backtrack(start) {
if (start === nums.length) {
result.push([...nums]);
return;
}
for (let i = 0; i < nums.length; i++) {
if (used[i] || (i > 0 && nums[i] === nums[i - 1] && !used[i - 1])) {
continue;
}
used[i] = true;
[nums[start], nums[i]] = [nums[i], nums[start]];
backtrack(start + 1);
[nums[start], nums[i]] = [nums[i], nums[start]];
used[i] = false;
}
}
backtrack(0);
return result;
}
// 测试
const nums = [1, 1, 2];
console.log(permuteUnique(nums));
```
以上三个示例分别展示了在 PHP、Python 和 JavaScript 中如何解决全排列 II 的问题,并且都考虑到了数组中可能存在重复元素的情况。码小课网站中有更多相关内容分享给大家学习,可以帮助大家深入理解算法和数据结构。