数组类39--组合总和(M)

image.png

AC代码

import java.util.*;
class Solution {
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        List<List<Integer>> ans = new ArrayList<>();
        if(candidates == null || candidates.length == 0) {
            return ans;
        }
        ArrayList<Integer> tmp = new ArrayList<>();
        backTrack(candidates, target, 0, tmp, ans);
        return ans;
    }
    private void backTrack(int[] candidates, int target, int nowStart, ArrayList<Integer> tmp, 
                           List<List<Integer>> ans) {
        if(target < 0) {
            return;
        }
        if(target == 0) {
            ans.add(new ArrayList<>(tmp));
            return;
        }
        for(int start = nowStart; start < candidates.length; start++) {
            tmp.add(candidates[start]);
            backTrack(candidates, target - candidates[start], start, tmp, ans);
            tmp.remove(tmp.size() - 1);
        }
        
    }
}

精髓
其实是DFS,所谓的回溯法,为一个满N叉树,但是要按数组的形式实现,这里剪枝其实就是target<0

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 简述 极客时间算法40讲中所出现的leetcode算法题 题目 【链表】reverse-linked-list(反...
    BestbpF阅读 9,983评论 0 4
  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 11,485评论 0 13
  • 前言 2. 实现 Singleton 3. 数组中重复的数字 4. 二维数组中的查找 5. 替换空格 6. 从尾到...
    Observer_____阅读 8,204评论 0 1
  • 更多干货就在我的个人博客 BlackBlog.tech 欢迎关注!也可以关注我的csdn博客:黑哥的博客谢谢大家!...
    BlackBlog__阅读 11,774评论 0 12
  • 看火树银花落地生辉 瞧细雨绵绵蒙蒙不停 风 吹醒了我的倦容 带走了我的忧伤 时钟 滴滴答答 走了一圈 回到了起点
    诗的奴仆阅读 3,110评论 0 1

友情链接更多精彩内容