首页 > 其他分享 >刷刷刷 Day 27 | 40. 组合总和 II

刷刷刷 Day 27 | 40. 组合总和 II

时间:2023-01-28 20:34:04浏览次数:52  
标签:27 target 组合 int sum 40 II candidates path

40. 组合总和 II

LeetCode题目要求

给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的每个数字在每个组合中只能使用 一次 。

注意:解集不能包含重复的组合。

示例

输入: candidates = [10,1,2,7,6,1,5], target = 8,
输出:
[
[1,1,6],
[1,2,5],
[1,7],
[2,6]
]
解题思路

类似组合总和、组合总和III,大致的写法思路一致。这里要按要求[candidates 中的每个数字在每个组合中只能使用 一次]
既然不能重复,那么我们就要去重,去重的操作可以在找到所有结果后去重,但是耗时较大。
实际可以将数组先排序,然后在遍历过程中,来判断元素是否被重复使用过即可

上代码

class Solution {
    private Deque<Integer> path = new LinkedList<>();
    private List<List<Integer>> res = new ArrayList<>();

    public List<List<Integer>> combinationSum2(int[] candidates, int target) {
        Arrays.sort(candidates);
        backtracking(candidates, target, 0, 0);
        return res;
    }

    private void backtracking(int[] candidates, int target, int startIndex, int sum) {
        if (sum > target) {
            return;
        }

        if (sum == target) {
            res.add(new ArrayList<>(path));
            return;
        }
        
        for (int i = startIndex; i < candidates.length; i++) {
            if (sum > target) {
                break;
            }
            if (i > startIndex && candidates[i] == candidates[i-1]) {
                continue;
            }
            path.add(candidates[i]);
            sum += candidates[i];
            backtracking(candidates, target, i + 1, sum);
            sum -= candidates[i];
            path.removeLast();
        }
    }
}
重难点

去重

附:学习资料链接

标签:27,target,组合,int,sum,40,II,candidates,path
From: https://www.cnblogs.com/blacksonny/p/17071215.html

相关文章

  • 刷刷刷 Day 27 | 39. 组合总和
    39.组合总和LeetCode题目要求给你一个无重复元素的整数数组 candidates和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target的所有 不同......
  • 【算法训练营day28】LeetCode93. 复原IP地址 LeetCode78. 子集 LeetCode90. 子集II
    LeetCode93.复原IP地址题目链接:93.复原IP地址独上高楼,望尽天涯想起来简单,写起来还是很难的一道题,小错误频发。慕然回首,灯火阑珊首先,因为本题要求只能分割成四段,所......
  • LTC2440串行SPI通讯时序
    LTC2440简介我们使用4-wireSPI接口按照时序图上的描述,SDO是在SCLK的下降沿更新数据,那么FPGA接收端就应该在上升沿采集数据。实际测试发现SDO数据相对于SCLK延迟了6......
  • 图片转ASCII字符图案的原理(可调整亮度对比度 宽高度)
    来,先看效果哈哈哈哈!演示地址:http://ascii-picture.imlht.com/"\`"""."\`"""""""""""""""""""w$@w""""&q......
  • Which car models can work with VOCOMII
    Whichcarmodelscanworkwith VOCOMII*SupportedVehiclesModels:VolvoTrucks–Olderelectricalsystem,Vehicleelectricalsystem’98;VERSION2,VERSION......
  • Rhino 7 for Mac(犀牛3D建模软件) 7.27中文激活版
    3D建模软件推荐:Rhino7!Rhino7可以创建、编辑、分析、记录、渲染、动画和转换NURBS曲线、曲面和实体、细分几何(SubD)、点云和多边形网格。在Rhino7中,我们修复了数百个......
  • NETAPP FAS2720初始化配置
    配置前准备1.管理地址(必须)3个:1个集群管理地址,2个节点管理地址2.SP地址2个:2个底层管理地址,相当于服务器BMC地址,配置完成后可以远程进行系统重装等操作3.DNS地址:使用CIFS需......
  • 刷刷刷 Day 25 | 216. 组合总和 III
    216.组合总和IIILeetCode题目要求找出所有相加之和为 n的 k 个数的组合,且满足下列条件:只使用数字1到9每个数字 最多使用一次 返回所有可能的有效组合的列表......
  • 算法--2023.1.27
    1.力扣394--字符串解码classSolution{publicStringres;publicinti;publicStringdecodeString(Strings){res=newString();......
  • 【双指针】LeetCode 167. 两数之和 II - 输入有序数组
    题目链接167.两数之和II-输入有序数组思路本思路来自一张图告诉你O(n)的双指针解法的本质原理(C++/Java)下图是白色部分初始的搜索空间,即A[0]+A[7]假如targ......