给定一个无重复元素的正整数数组 nums 和一个正整数 target ,找出 nums 中所有可以使数字之和为目标数 target 的组合,nums 中的数可以重复选取,只要选出的组合中有一个数不同则视为是不同组合。
数据范围:数组长度满足
, 数组中的元素满足
,
,保证组合数结果少于 150 个
1,[1]
[[1]]
5,[1,4,5]
[[1,4],[5],[1,1,1,1,1]]
5,[2]
[]
package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param target int整型
* @param nums int整型一维数组
* @return int整型二维数组
*/
func combinationCount( target int , nums []int ) [][]int {
ans:=[][]int{}
var dfs func([]int,int,int)
dfs=func(path []int,sum int,idx int){
if sum>=target{
if sum==target{
tmp:=make([]int,len(path))
copy(tmp,path)
ans=append(ans,tmp)
}
return
}
for i:=idx;i<len(nums);i++{
path=append(path,nums[i])
sum+=nums[i]
dfs(path,sum,i)
path=path[:len(path)-1]
sum-=nums[i]
}
}
dfs([]int{},0,0)
return ans
}