上海全部解封通知最新seo優(yōu)化關(guān)鍵詞是什么意思
回溯
1、子集
題目:
給你一個整數(shù)數(shù)組 nums ,數(shù)組中的元素 互不相同 。返回該數(shù)組所有可能的子集(冪集)。
解集 不能 包含重復(fù)的子集。你可以按 任意順序 返回解集。
輸入:nums = [1,2,3]
輸出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
思路:
- 簡單點的
func subsets(nums []int) [][]int {// 子集問題很經(jīng)典很簡單res := [][]int{}list := []int{}backtrack(&res, list,nums,0)return res
}
func backtrack(res *[][]int, list,nums []int, index int) {ans := make([]int, len(list))copy(ans, list)*res = append(*res, ans)for i:=index; i<len(nums); i++ {list = append(list, nums[i])backtrack(res, list, nums, i+1)list = list[:len(list)-1]}
}
2、90. 子集 II
題目:
輸入:nums = [1,2,2]
輸出:[[],[1],[1,2],[1,2,2],[2],[2,2]]
思路:
- 去重注意一下而已,去重的條件是,當(dāng)前值和前一個一樣不,不一定vis
func subsetsWithDup(nums []int) [][]int {// 代碼二刷res := [][]int{}list := []int{}backtrack(&res, list, nums, 0) return res
}
func backtrack(res *[][]int, list,nums []int, index int) {ans := make([]int, len(list))copy(ans, list)*res = append(*res, ans)for i:=index; i<len(nums); i++ {if i!=index && nums[i]==nums[i-1] {continue}list = append(list, nums[i])backtrack(res, list, nums, i+1)list = list[:len(list)-1]}
}
3、
題目:
思路: