算法:全排列||
?全排列|| ?(數組中有重復的元素)
//遞歸加回溯 func permuteUnique(nums []int) (ans [][]int) {//對數組進行排序sort.Ints(nums)n := len(nums)perm := []int{}//標記是否被訪問vis := make([]bool, n)var backtrack func(int)backtrack = func(idx int) {if idx == n {ans = append(ans, append([]int(nil), perm...))return}for i, v := range nums {//這個數填過直接continue//這個數沒填過,但是他前一個數也沒填過和當前數和前一個數相等,直接continue//重復的數相鄰只能算是一種情況if vis[i] || i > 0 && !vis[i-1] && v == nums[i-1] {continue}perm = append(perm, v)vis[i] = true//遞歸backtrack(idx + 1)vis[i] = falseperm = perm[:len(perm)-1]}}backtrack(0)return }
鏈接:https://leetcode-cn.com/problems/permutations-ii/solution/quan-pai-lie-ii-by-leetcode-solution/
總結
- 上一篇: 算法:三角形最小路径和
- 下一篇: 算法:四数之和