美文网首页
39. 组合总和

39. 组合总和

作者: 邦_ | 来源:发表于2022-07-20 09:53 被阅读0次

很扯。。比方说这个测试用例 [100,200,4,12] 400
如果用dfs的话 递归会很恐怖= =。。要想办法剪枝
下次从第i个位置选择的话。就不会选择左边的 不会产生重复的= =。。


func combinationSum(_ candidates: [Int], _ target: Int) -> [[Int]] {

     
        var remain = target
        var tempArray = Array<Int>()
        var ans = [[Int]]()
        let len = candidates.count
        dfs(&ans,candidates.sorted(),0,len,&remain,&tempArray)
        return ans
    
    }
    
    func dfs(_ ans:inout [[Int]],_ candidates:[Int],_ begin:Int,_ len:Int,_ remain:inout Int,_ tempArray:inout [Int]){
        //说明找到了合适的组合
        if remain == 0 {
            ans.append(tempArray)
        }
        
        //每一层可以选择的
        for i in begin..<len {
            let num = candidates[i]
            if remain >= num {
                remain -= num
                tempArray.append(num)
                dfs(&ans,candidates,i,len,&remain,&tempArray)
                remain += tempArray.removeLast()
            }else {
                
                break
            }
        }
            
    }





相关文章

  • 39. 组合总和

    39. 组合总和 很慢的dfs

  • 39. 组合总和

    39. 组合总和 https://leetcode-cn.com/problems/combination-sum...

  • 39. 组合总和

    给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可...

  • 39.组合总和

    题目给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所...

  • 39.组合总和

  • 39.组合总和

    Given a set of candidate numbers (candidates) (without du...

  • 39.组合总和

    给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可...

  • 39. 组合总和

    解题思路 典型的回溯法:递归跳出的条件return 满足题目条件将list加入容器else 未满足条件:for(遍...

  • 39. 组合总和

    题目描述 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates...

  • 39. 组合总和

    题目 39. 组合总和 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 can...

网友评论

      本文标题:39. 组合总和

      本文链接:https://www.haomeiwen.com/subject/ynmjirtx.html