| 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, ",")}
 |