2.25力扣-回溯组合总和

39. 组合总和 - 力扣(LeetCode)

一:Java

java 复制代码
class Solution {
    List<List<Integer>> ans=new LinkedList<>();
    List<Integer> temp=new LinkedList<>();
    int sum=0;

    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        df(candidates, target, 0);
        return ans;
    }

    public void df(int[] candidates, int target,int start){
        if(sum>target) return ;
        if(sum==target){
            ans.add(new LinkedList<>(temp));
            return ;
        }
        for (int i = start; i < candidates.length; i++) {
            temp.add(candidates[i]);
            sum+=candidates[i];
            df(candidates, target, i);
            sum-=candidates[i];
            temp.removeLast();
        }
    }
}

为什么删去:if(sum>target) return ; 语句,会报错 -- 栈溢出

因为递归是i开始,而非i+1,如果没有这个 if(sum>target) return 语句,达不到sum==target的条件,会一直在i处累加,最后一直递归没有结束。

相关推荐
是代码侠呀8 分钟前
从前端视角看网络协议的演进
leetcode·开源·github·github star·github 加星
C_Liu_33 分钟前
C语言:深入理解指针(3)
c语言·数据结构·算法
xindafu1 小时前
代码随想录算法训练营第三十八天|动态规划part6(完全背包2)
算法·动态规划
刃神太酷啦2 小时前
类和对象(1)--《Hello C++ Wrold!》(3)--(C/C++)
java·c语言·c++·git·算法·leetcode·github
I AM_SUN3 小时前
994. 腐烂的橘子
数据结构·c++·算法·leetcode·职场和发展
真的想上岸啊3 小时前
c语言第一个小游戏:贪吃蛇小游戏03
c语言·开发语言·算法
Tisfy4 小时前
LeetCode 3341.到达最后一个房间的最少时间 I:Dijkstra算法(类似深搜)-简短清晰的话描述
leetcode··最短路·dijkstra·题解·迪杰斯特拉
拼好饭和她皆失5 小时前
dfs 第一次加训 详解 下
算法·深度优先
朱剑君13 小时前
第四天——贪心算法——种花
算法·贪心算法
TextIn智能文档云平台13 小时前
PDF文档解析新突破:图表识别、公式还原、手写字体处理,让AI真正读懂复杂文档!
图像处理·人工智能·算法·自然语言处理·pdf·ocr