收下我的膝盖吧......唉,太难了。感觉读懂这种递归代码就挺费劲的!难搞...
这个大神的解析比较清晰:作者:carlsun-2
链接:https://leetcode-cn.com/problems/combination-sum-ii/solution/dai-ma-sui-xiang-lu-dai-ni-xue-tou-hui-s-ig29/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
截图:

个人微改:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
public class combinationSum_2 {
public static void main(String args[]) {
solution02 hah = new solution02();
int a[] = new int[] {1,1,2,5};
hah.combination(a,7);
System.out.println(hah.lists);
}
}
class solution02{
List<List<Integer>> lists = new ArrayList<>();
Deque<Integer> deque = new LinkedList<>();
int sum=0;
public List<List<Integer>> combination(int candidates[],int target){
Arrays.sort(candidates);
boolean flag[] = new boolean[candidates.length];
backTracking(candidates, target, 0, flag);
return lists;
}
public void backTracking(int arr[],int target,int index,boolean[] flag) {
if(sum==target) {
lists.add(new ArrayList(deque));
return;
}
for(int i=index;i<arr.length;i++) {
if(i>0 && arr[i]==arr[i-1] && !flag[i-1]) {
continue;
}
flag[i]=true;
sum += arr[i];
deque.push(arr[i]);
backTracking(arr, target, i + 1, flag);
int temp = deque.pop();
flag[i]=false;
sum -= temp;
}
}
}

本文探讨了如何使用Java解决LeetCode中的组合求和II问题,通过backTracking算法和递归实现,代码实例和解析详细介绍了如何处理重复元素。

被折叠的 条评论
为什么被折叠?



