[Leetcode][第40题][JAVA][数组总和2][回溯][剪枝]

【问题描述】[中等]

在这里插入图片描述

【解答思路】

在这里插入图片描述
在这里插入图片描述

1. 减法
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Deque;
import java.util.List;public class Solution {public List<List<Integer>> combinationSum2(int[] candidates, int target) {int len = candidates.length;List<List<Integer>> res = new ArrayList<>();if (len == 0) {return res;}// 关键步骤Arrays.sort(candidates);Deque<Integer> path = new ArrayDeque<>(len);dfs(candidates, len, 0, target, path, res);return res;}/*** @param candidates 候选数组* @param len        冗余变量* @param begin      从候选数组的 begin 位置开始搜索* @param target     表示剩余,这个值一开始等于 target,基于题目中说明的"所有数字(包括目标数)都是正整数"这个条件* @param path       从根结点到叶子结点的路径* @param res*/private void dfs(int[] candidates, int len, int begin, int target, Deque<Integer> path, List<List<Integer>> res) {if (target == 0) {res.add(new ArrayList<>(path));return;}for (int i = begin; i < len; i++) {// 大剪枝if (target - candidates[i] < 0) {break;}// 小剪枝if (i > begin && candidates[i] == candidates[i - 1]) {continue;}path.addLast(candidates[i]);// 因为元素不可以重复使用,这里递归传递下去的是 i + 1 而不是 idfs(candidates, len, i + 1, target - candidates[i], path, res);path.removeLast();}}public static void main(String[] args) {int[] candidates = new int[]{10, 1, 2, 7, 6, 1, 5};int target = 8;Solution solution = new Solution();List<List<Integer>> res = solution.combinationSum2(candidates, target);System.out.println("输出 => " + res);}
}
2. 加法
class Solution {public List<List<Integer>> res = new ArrayList<>();public List<List<Integer>> combinationSum2(int[] candidates, int target) {int len = candidates.length;boolean[] used = new boolean[len];Arrays.sort(candidates);dfs(candidates,target,new ArrayDeque<Integer>(),0,0);return res;}public void dfs(int[] cand,int target,Deque<Integer> temp,int sum,int index){if(sum>target) return;if(sum==target){res.add(new ArrayList<>(temp));return;}for(int i=index;i<cand.length;++i){if (i > index && cand[i] == cand[i - 1]) {continue;}temp.addLast(cand[i]);dfs(cand,target,temp,sum+cand[i],i+1);temp.removeLast();}}
}

【总结】

1. 剪枝说明在这里插入图片描述
2.回溯算法相关题目

[Leedcode][JAVA][第46题][全排列][回溯算法]
[Leetcode][第81题][JAVA][N皇后问题][回溯算法]
[Leetcode][第60题][JAVA][第k个排列][回溯][DFS][剪枝]
[Leetcode][第39题][JAVA][组合总和][回溯][dfs][剪枝]

转载链接:https://leetcode-cn.com/problems/combination-sum-ii/solution/hui-su-suan-fa-jian-zhi-python-dai-ma-java-dai-m-3/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Breadth-first Search(广度优先搜索)专题2

743. Network Delay Time 输入&#xff1a;int[][] times times[i] new int[]{v,u,w} 表示从节点v到节点u需要时间w。注意这里是有向图。    int N 节点总数。    int k 起始节点 输出&#xff1a;从节点k到其他各个节点的最短路径和。如果有一个节点不能达到则返回-1。 …

负载均衡—几种常见算法

什么是负载均衡&#xff1f; 当一台服务器的性能达到极限时&#xff0c;我们可以使用服务器集群来提高网站的整体性能。那么&#xff0c;在服务器集群中&#xff0c;需要有一台服务器充当调度者的角色&#xff0c;用户的所有请求都会首先由它接收&#xff0c;调度者再根据每台服…

[Leetcode][第79题][JAVA][单词搜索][DFS][回溯]

【问题描述】[中等] 【解答思路】 1. DFS繁琐版本 class Solution {public boolean exist(char[][] board, String word) {boolean flag false;int row board.length;int col board[0].length;boolean[][] used new boolean[row][col];for (int i 0; i <row ; i) {for …

【Breadth-first Search 】513. Find Bottom Left Tree Value

输入&#xff1a;一颗二叉树 输出&#xff1a;这颗树的最下面一层最左边的节点值。 分析&#xff1a; 用BFS的思路解决最直观。读每一层&#xff0c;在每一层记录第一个元素的值。在队列中第一层&#xff1a;1&#xff1b;第二层&#xff1a;2&#xff0c;3&#xff1b;第三层…

Java:这是一份全面 详细的 Synchronized关键字 学习指南

前言 在Java中&#xff0c;有一个常被忽略 但 非常重要的关键字Synchronized今天&#xff0c;我将详细讲解 Java关键字Synchronized的所有知识&#xff0c;希望你们会喜欢目录 1. 定义 Java中的1个关键字 2. 作用 保证同一时刻最多只有1个线程执行 被Synchronized修饰的方法…

[Leetcode][第404题][JAVA][左叶子之和][DFS][BFS]

【问题描述】[简单] 【解答思路】 1. DFS 递进思想 一步一步递进 /先序遍历求所有节点值之和 public int sumOfTrees(TreeNode root) {if (root null) {return 0;}int leave root.val;int left sumOfTrees(root.left);int right sumOfTrees(root.right);return left ri…

第十四期: 拥有7000多万店铺和10多亿件商品的微店如何打造AI系统?

AI技术对于电商至关重要&#xff0c;但AI的实践门槛很高&#xff0c;对于创业公司尤其如此。那么电商创业公司如何打造AI系统?如何利用AI解决实际问题? 作者&#xff1a;夏剑 AI技术对于电商至关重要&#xff0c;但AI的实践门槛很高&#xff0c;对于创业公司尤其如此。那么电…

【数据结构与算法】【算法思想】位图

位图BitMap 算法 public class BitMap { // Java中char类型占16bit&#xff0c;也即是2个字节private char[] bytes;private int nbits;//nbits 总容量public BitMap(int nbits) {this.nbits nbits;this.bytes new char[nbits/161];}//长度16 k/16 定位某一段 k%16定位段中某…

【Breadth-first Search 】专题3

529 Minesweeper 输入&#xff1a;一个二维矩阵&#xff0c;一些修改规则。  如果点到一个隐藏的地雷M&#xff0c;把它改为X&#xff0c;游戏结束  如果点到一个E&#xff0c;且其周围8邻接的范围没有地雷&#xff0c;那么应该把8邻接的范围的格子全部翻开为E  如果翻开的…

第十五期:一个用户至少“值”100美元,美国最“贵”数据法案CCPA明年初实行!

还在急于应对欧洲GDPR&#xff08;General Data Protection Regulation&#xff0c;通用数据保护条例&#xff09;&#xff1f;那你就OUT了&#xff01; 作者&#xff1a;文摘菌 大数据文摘出品 作者&#xff1a;刘俊寰 还在急于应对欧洲GDPR(General Data Protection Regul…

【数据结构与算法】【算法思想】【推荐系统】向量空间

背景知识 欧几里得的距离公式 推荐系统方法 应用 如何实现一个简单的音乐推荐系统&#xff1f; 1. 基于相似用户做推荐 找到跟你口味偏好相似的用户&#xff0c;把他们爱听的歌曲推荐给你&#xff1b; 2. 基于相似歌曲做推荐 找出跟你喜爱的歌曲特征相似的歌曲&#x…

第十六期:AWS 瘫痪:DNS 被 DDoS 攻击了 15 个小时

AWS警告客户&#xff0c;分布式攻击严重阻碍网络连接&#xff0c;殃及众多网站和应用软件&#xff0c;云巨头AWS遭到攻击后&#xff0c;今天其部分系统实际上断。网。 作者&#xff1a;佚名来源|2019-10-23 15:17 AWS警告客户&#xff0c;分布式攻击严重阻碍网络连接&#xff…

Spring Security在标准登录表单中添加一个额外的字段

概述 在本文中&#xff0c;我们将通过向标准登录表单添加额外字段来实现Spring Security的自定义身份验证方案。 我们将重点关注两种不同的方法&#xff0c;以展示框架的多功能性以及我们可以使用它的灵活方式。 我们的第一种方法是一个简单的解决方案&#xff0c;专注于重用现…

【数据结构与算法】【算法思想】【MySQL数据库索引】B+树

B树特点 考虑因素 支持按照区间来查找数据 磁盘 IO 操作 N叉树 树的高度就等于每次查询数据时磁盘 IO 操作的次数 在选择 m 大小的时候&#xff0c;要尽量让每个节点的大小等于一个页的大小。读取一个节点&#xff0c;只需要一次磁盘 IO 操作。&#xff08;分裂成两个节点&am…

第十七期:2019人工智能统计数字和一些重要事实

人工智能(AI)每天在以惊人的速度发展。这项技术在2018年已经取得了巨大的成功&#xff0c;简化医疗保健业的工作流程&#xff0c;降低制造业的间接费用&#xff0c;并减少教育业的行政工作量。现在是2019年&#xff0c;每天似乎都有一家新的AI初创公司冒出来&#xff0c;致力于…

[Leetcode][第78题][JAVA][子集][位运算][回溯]

【问题描述】[中等] 【解答思路】 1. 位运算 复杂度 class Solution {List<Integer> t new ArrayList<Integer>();List<List<Integer>> ans new ArrayList<List<Integer>>();public List<List<Integer>> subsets(int[] n…

第十八期:闲鱼上哪些商品抢手?Python分析后告诉你

经常看到有朋友在闲鱼卖些小东西又或是自己擅长的一些技能&#xff0c;都能为他们带来不错的 睡后收入。 作者&#xff1a;星安果 1.目标场景 经常看到有朋友在闲鱼卖些小东西又或是自己擅长的一些技能&#xff0c;都能为他们带来不错的睡后收入。 闲鱼上大量的商品&#xf…

[Leetcode][第1143题][JAVA][最长公共子序列][LCS][动态规划]

【问题描述】[中等] 【解答思路】 时间复杂度&#xff1a;O(N^2) 空间复杂度&#xff1a;O(N^2) class Solution {public int longestCommonSubsequence(String text1, String text2) {int m text1.length(), n text2.length();int[][] dp new int[m 1][n 1];for (int i …

第十九期:程序员节,女朋友偷偷送了我这个...

10 月 24 日&#xff0c;本是个寻常的日子&#xff0c;但是在新时代的中国&#xff0c;却赋予了它新的意义。 作者&#xff1a;技术栈 10 月 24 日&#xff0c;本是个寻常的日子&#xff0c;但是在新时代的中国&#xff0c;却赋予了它新的意义。 正是广大的程序员们&#xff…

第二十期:黄金三步法 | 汇报时,如何让老板快速抓住重点?

对事物的归类分组是我们人类的天性&#xff0c;我们的大脑会自动将发现的所有事物以某种持续组织起来。但如何组织才能帮助我们解决工作和生活中出现的各种复杂问题?今天&#xff0c;我们请阿里高级技术专家张建飞分享他的黄金三步法。 作者&#xff1a;从码农到工匠 对事物的…