12345678910111213141516171819202122232425262728293031323334353637 |
- package main
- import (
- "fmt"
- "sort"
- )
- func combineWithDup(nums []int, k int) (res [][]int) {
- n := len(nums)
- if k == 0 || k == n {
- row := make([]int, k)
- for i := range row {
- row[i] = nums[i]
- }
- return append(res, row)
- }
- for _, row := range combineWithDup(nums[:n-1], k-1) {
- row = append(row, nums[n-1])
- res = append(res, row)
- }
- res = append(res, combineWithDup(nums[:n-1], k)...)
- return res
- }
- func subsetsWithDup(nums []int) [][]int {
- sort.Ints(nums)
- res := [][]int{}
- for i := 0; i <= len(nums); i++ {
- res = append(res, combineWithDup(nums, i)...)
- }
- return res
- }
- func main() {
- arr := []int{1, 3, 1, 3}
- fmt.Println(subsetsWithDup(arr))
- }
|