首页 > 试题广场 >

加起来和为目标值的组合

[编程题]加起来和为目标值的组合
  • 热度指数:2858 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个无重复元素的正整数数组 nums 和一个正整数 target ,找出 nums 中所有可以使数字之和为目标数 target 的组合,nums 中的数可以重复选取,只要选出的组合中有一个数不同则视为是不同组合。


数据范围:数组长度满足 , 数组中的元素满足 ,保证组合数结果少于 150 个
示例1

输入

1,[1]

输出

[[1]]
示例2

输入

5,[1,4,5]

输出

[[1,4],[5],[1,1,1,1,1]]
示例3

输入

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
}

发表于 2023-03-10 01:00:12 回复(0)