47.全排列 II
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
示例 1:
输入:nums = [1,1,2]
输出:
[[1,1,2],
[1,2,1],
[2,1,1]]
示例 2:
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
提示: 1 <= nums.length <= 8 -10 <= nums[i] <= 10
解题思路:
func permuteUnique(nums []int) [][]int {
var result [][]int
var backtrack func(path []int, remaining []int)
backtrack = func(path, remaining []int) {
if len(path) == len(nums) {
temp := make([]int, len(path))
copy(temp, path)
result = append(result, temp)
return
}
// 判断去重
for i := 0; i < len(remaining); i++ {
// 去重
if i > 0 && remaining[i-1] == remaining[i] {
continue
}
path = append(path, remaining[i])
nextremaining := make([]int, len(remaining)-1)
copy(nextremaining[:i], remaining[:i])
copy(nextremaining[i:], remaining[i+1:])
backtrack(path, nextremaining)
path = path[:len(path)-1]
}
}
// 排序
sort.Ints(nums)
backtrack(nil, nums)
return result
}