From f630b021d02cb0ea8bd2cde21954f6b888042ac6 Mon Sep 17 00:00:00 2001 From: fanxb Date: Tue, 4 Jan 2022 23:21:29 +0800 Subject: [PATCH] add --- 5.leetcode/src/com/fanxb/common/Q40.java | 26 +++++++++++++++--------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/5.leetcode/src/com/fanxb/common/Q40.java b/5.leetcode/src/com/fanxb/common/Q40.java index d0ff0e3..f48501f 100644 --- a/5.leetcode/src/com/fanxb/common/Q40.java +++ b/5.leetcode/src/com/fanxb/common/Q40.java @@ -1,5 +1,6 @@ package com.fanxb.common; +import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List; @@ -12,26 +13,31 @@ public class Q40 { return res; } - private void deal(List> res, List cur, int i, int[] sources, int target) { - if (target < sources[i]) { + private void deal(List> res, List cur, int start, int[] sources, int target) { + if (start >= sources.length || target < sources[start]) { return; } - for (; i < sources.length; i++) { + for (int i = start; i < sources.length; i++) { if (sources[i] > target) { return; } - List temp = new LinkedList<>(cur); - temp.add(sources[i]); - if (sources[i] == target) { - res.add(temp); - } else { - deal(res, temp, i + 1, sources, target - sources[i]); + if (i > start && sources[i] == sources[i - 1]) { + //第二个重复的元素不需要进行后续操作 + continue; } + cur.add(sources[i]); + if (sources[i] == target) { + res.add(new ArrayList<>(cur)); + } else { + deal(res, cur, i + 1, sources, target - sources[i]); + } + //加入后删除当前元素,尝试下一个 + cur.remove(cur.size() - 1); } } public static void main(String[] args) { - new Q40().combinationSum2(new int[]{10, 1, 2, 7, 6, 1, 5}, 8); + new Q40().combinationSum2(new int[]{2, 5, 2, 1, 2}, 5); }