| 12345678910111213141516171819202122232425262728293031323334353637383940414243 | 
							- var empty struct{} = struct{}{}
 
- func combinationSum4(nums []int, target int) int {
 
- 	// res := make(map[string]struct{})
 
- 	// dfs(nums, target, []int{}, &res)
 
- 	// return len(res)
 
- 	n := len(nums)
 
- 	if n == 0 {
 
- 		return 0
 
- 	}
 
- 	sort.Ints(nums)
 
- 	dp := make([]int, target+1)
 
- 	dp[0] = 1
 
- 	for i := 1; i <= target; i++ {
 
- 		for _, val := range nums {
 
- 			if i < val {
 
- 				break
 
- 			}
 
- 			dp[i] += dp[i-val]
 
- 		}
 
- 	}
 
- 	return dp[target]
 
- }
 
- func dfs(nums []int, target int, pre []int, res *map[string]struct{}) {
 
- 	if target < 0 {
 
- 		return
 
- 	} else if target == 0 {
 
- 		(*res)[ints2str(pre)] = empty
 
- 		return
 
- 	}
 
- 	for _, i := range nums {
 
- 		dfs(nums, target-i, append(pre, i), res)
 
- 	}
 
- }
 
- func ints2str(nums []int) string {
 
- 	str := make([]string, len(nums))
 
- 	for i, v := range nums {
 
- 		str[i] = strconv.Itoa(v)
 
- 	}
 
- 	return strings.Join(str, ",")
 
- }
 
 
  |