90.go 671 B

12345678910111213141516171819202122232425262728293031323334353637
  1. package main
  2. import (
  3. "fmt"
  4. "sort"
  5. )
  6. func combineWithDup(nums []int, k int) (res [][]int) {
  7. n := len(nums)
  8. if k == 0 || k == n {
  9. row := make([]int, k)
  10. for i := range row {
  11. row[i] = nums[i]
  12. }
  13. return append(res, row)
  14. }
  15. for _, row := range combineWithDup(nums[:n-1], k-1) {
  16. row = append(row, nums[n-1])
  17. res = append(res, row)
  18. }
  19. res = append(res, combineWithDup(nums[:n-1], k)...)
  20. return res
  21. }
  22. func subsetsWithDup(nums []int) [][]int {
  23. sort.Ints(nums)
  24. res := [][]int{}
  25. for i := 0; i <= len(nums); i++ {
  26. res = append(res, combineWithDup(nums, i)...)
  27. }
  28. return res
  29. }
  30. func main() {
  31. arr := []int{1, 3, 1, 3}
  32. fmt.Println(subsetsWithDup(arr))
  33. }