当前位置: 首页 > news >正文

39. 组合总和

39. 组合总和

https://leetcode.cn/problems/combination-sum/description/

39. 组合总和

  • 39. 组合总和
  • C++
  • java

C++

//
// Created by 25678 on 2024/11/1.
//#ifndef GUC_39_组合总和_H
#define GUC_39_组合总和_H
#include <vector>;
#include <iostream>
#include <algorithm>using namespace std;class Solution {
private:vector<vector<int>> result;vector<int> path;/**** @param candidates* @param target* @param curSum* @param startIndex*/void backtracking(vector<int>& candidates,int target,int curSum,int startIndex){if(curSum==target){result.push_back(path);return;}for(int i=startIndex;i<candidates.size();i++) {if (curSum + candidates[i] > target) {return;}curSum += candidates[i];path.push_back(candidates[i]);backtracking(candidates, target, curSum, i);curSum -= candidates[i];path.pop_back();  // 回溯,撤销选择的元素,保证不再使用该元素}}public:vector<vector<int>> combinationSum(vector<int>& candidates, int target) {result.clear();path.clear();// 将candidates从小到大排序sort(candidates.begin(),candidates.end());backtracking(candidates,target,0,0);return result;}
};
#endif //GUC_39_组合总和_H

java

package 代码随想录.回溯.第二遍;import java.util.*;public class _39组合总和 {List<List<Integer>> res = new ArrayList<>();List<Integer> path = new ArrayList<>();/**** @param candidates    整数数组 candidates* @param target        目标整数 target* @return  找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合* candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。*/public List<List<Integer>> combinationSum(int[] candidates, int target) {Arrays.sort(candidates);    // 排序,方便剪枝backTracking(candidates,target,0,0);return res;}/*** 方法二:增加一个访问的索引,避免重复组合* @param candidates* @param target* @param curSum* @param startIndex 递归的起始索引,避免重复组合*/private void backTracking(int[] candidates, int target, int curSum, int startIndex) {if (curSum == target) {res.add(new ArrayList<>(path)); // 复制当前 path 并添加到 resreturn;} else if (curSum > target) {return;}// 遍历候选数组for (int i = startIndex; i < candidates.length; i++) {path.add(candidates[i]);curSum += candidates[i];backTracking(candidates, target, curSum, i); // 递归调用,传入当前索引 i 以允许重复选择path.remove(path.size() - 1); // 回溯curSum -= candidates[i];}}
}

http://www.mrgr.cn/news/63309.html

相关文章:

  • C#入坑JAVA MyBatis入门 CURD 批量 联表分页查询
  • Makefile Npm
  • 【力扣 + 牛客 | SQL题 | 每日6题】牛客SQL热题 + 力扣hard
  • Python编程风格:深入了解Lambda表达式
  • C++ 模板专题 - 静态多态(CRTP)
  • Java-01
  • SpringBoot3集成Swagger接口文档功能、接口排序以及如何设置接口页面的title/keyword/description?
  • BeanFactory与ApplicationContext的关系
  • CVPR2024:完全测试时域适应​​​​(Test-time Adaptation)的目标检测
  • k8s 小版本升级
  • C++类和对象上
  • qt QToolBar详解
  • 测试人必会 K8S 操作之 Dashboard
  • 最经典知识库问答数据集
  • 【Golang】Gin框架中如何使用JWT来实现登录认证
  • 计算机视觉-显著性检测实验报告
  • MySQL的常用命令
  • ThreeJs绘制手串
  • [KTM2802-FP6]气缸位置检测芯片,支持两线/三线气缸位置检测,将AMR传感器和ASIC集成在一个芯片中,国产品牌可信赖
  • GBDT 算法的原理推导
  • 【综合算法学习】(第十三篇)
  • java枚举高级用法
  • Ubuntu20.04版本安装pytorch(宝宝级攻略)
  • FineReport 超级链接
  • 入行网络安全需要学习哪些知识点?白帽子佬都给你汇总在这里,一文全懂_网络安全入门应该学什么
  • huggingface利用bert-base-chinese实现中文情感分类