第二十七天|39. 组合总和

这篇文章介绍了如何使用回溯算法解决LeetCode第39题,即寻找给定数组中所有和为目标值的组合,同时允许结果重复。给出了两种实现方式,重点在于backtracking函数的递归调用和终止条件的设置。

第二十七天|39. 组合总和

39_题目关键字:回溯,结果可重复

39_题目链接

代码实现

package LeetCode;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class YangSibo_39 {
}

class YangSibo_39_1{
    LinkedList<Integer> path = new LinkedList<>();
    List<List<Integer>> result = new ArrayList<>();
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        path.clear();
        result.clear();
        backtracking(0,candidates,target);
        return result;
    }
    public void backtracking(int startindex, int[] candidates, int target){
        int sum = 0;
        for(int num: path){
            sum = sum + num;
        }
        if(sum > target) return;
        if(sum == target) {
            result.add(new ArrayList<>(path));
            return;
        }
        for(int i = startindex;i < candidates.length;i++){
            path.add(candidates[i]);
            backtracking(i,candidates,target);
            path.removeLast();
        }
    }
}
class YangSibo_39_2{
    LinkedList<Integer> path = new LinkedList<>();
    List<List<Integer>> result = new ArrayList<>();
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        path.clear();
        result.clear();
        backtracking(0,candidates,target);
        return result;
    }
    public void backtracking(int startindex, int[] candidates, int target){
        int sum = 0;
        for(int num: path){
            sum = sum + num;
        }
        if(sum > target) return;
        if(sum == target) {
            result.add(new ArrayList<>(path));
            return;
        }
        for(int i = startindex;i < candidates.length && (sum + candidates[i] <= target);i++){
            path.add(candidates[i]);
            backtracking(i,candidates,target);
            path.removeLast();
        }
    }
}

解题注意事项

1、回溯模板明确参数

题目 基于附件中的缺陷数据和表3中的订单需求,建立数学模型,制定最优切割方案。 附件 |原材料长度(米)|缺陷位置(米)|缺陷长度(米)|单价(元/根)| | ---- | ---- | ---- | ---- | |5.5|1|0.3|17| |5.5|3|0.2|17.33| |6.2|2|0.4|20.59| |7|1.5|0.2|24.41| |7|4|0.3|24.05| |5.8|1.2|0.5|17.33| |6.5|2.3|0.3|22| |7.5|1|0.6|24.77| |6|2.8|0.4|19.83| |8.2|1.3|0.5|27.64| |6.8|2.1|0.3|23.32| |6.8|5|0.2|23.69| |5.6|1.1|0.2|17.66| |7.3|3.1|0.4|24.77| |6.1|1.7|0.5|19.83| |8|2.5|0.3|27.64| |5.9|3|0.4|18| |6.3|1.9|0.3|21.27| |7.8|1.2|0.4|26.57| |6.7|2.4|0.3|22.91| |5.4|0.8|0.3|16.68| |7.4|3|0.2|25.85| |6.9|2|0.5|22.91| |8.1|2.2|0.4|27.64| |7.6|1.6|0.3|26.2| |5.7|2.7|0.4|17.33| |6.4|1.8|0.2|22| |8.3|0.9|0.3|28.72| |6|1.1|0.5|18| |7.9|2.9|0.2|27.64| |5.5|1.3|0.4|16.68| |6.2|3.2|0.3|20.95| |7.1|2.3|0.5|23.69| |6.8|1.9|0.2|23.69| |5.8|2.5|0.4|17.66| |7.3|3|0.3|25.13| |6.9|2|0.2|24.05| |7.5|1.6|0.4|25.49| |5.6|1|0.3|17.33| |6.4|2.2|0.5|20.95| |6.6|2|0.4|22| |7|3.1|0.3|24.05| |8|1.5|0.2|28| |5.9|1.9|0.3|19.83| |7.7|2.6|0.5|25.85| |6.5|1.1|0.2|22.41| |7.2|2.7|0.4|24.41| |6.1|3|0.3|20.59| |5.4|1.5|0.2|17| |8.2|2|0.5|27.64| |6.7|2.9|0.3|22.91| |7.8|1.2|0.4|26.57| |5.5|2.1|0.5|16.36| |6.6|3.2|0.4|22| |7|1.7|0.3|24.05| |5.8|1|0.4|17.66| |8|2.3|0.2|28| |6.9|2.5|0.3|23.69| |7.2|3|0.4|24.41| |6.3|2.4|0.3|21.27| |8.1|1.9|0.5|27.27| |5.6|3.1|0.4|17| |7.4|2|0.3|25.49| |6.1|1.8|0.5|19.83| |6.8|2.1|0.2|23.69| |7.3|1.4|0.3|25.13| |5.7|2.6|0.4|17.33| |7|2.5|0.2|24.41| |6.5|3|0.3|22| |5.8|1.2|0.5|17.33| |8.2|2.7|0.4|28| |7.5|3|0.3|25.85| |6|1.1|0.3|19.41| |7.7|2.3|0.5|25.85| |6.6|2|0.4|22| |6.2|3.1|0.2|21.27| |7.3|1.5|0.3|25.13| |5.5|2.4|0.4|16.68| |7|1.8|0.5|23.32| |6.9|2.5|0.3|23.69| |8|2.6|0.4|27.27| |7.4|1.7|0.2|25.85| |6.3|3|0.5|20.59|表3:订单的具体切割需求 表格 订单号 订单需求对象 订单量(套) 宽度目标(米) 高度目标(米) 窗框单价(元/套) 1 学校教学楼 120 1.6 2.2 480 2 酒店客房 80 1.8 2.4 680 3 医院病房 60 1.7 2.3 550 4 政府办公楼 40 1.5 2.0 420 说明 (1)利用率 =(总用料量 - 切割后的总余料量)/总用料量,其中总用料量含锯口宽度。 (2)题中切割损失率及利用率的研究对象是总用料,而非单根原材料。
05-12
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值