leetcode 0039
说明
只是为了记录一下,不求多快,也不深究。
会简要描述思路,代码中不写注释。
如碰到不会做的用了别人代码会在博客中标出。
题目描述
思路
一个深搜,用递归做,这方面的题还是不太熟,花了一点时间。
每添加一个数进来就把这个数放到temp里面,若到最后可以使得target为0,则证明有解,放到最终的List里面。
isSameLsit()
这个方法是用来判断两个列表是否相同(元素相同元素顺序不同的情况),如果两个列表一样的话就不要重复加了。
class Solution {
public List<List<Integer>> combinationSum(int[] candidates, int target) {
List<List<Integer>> ll = new ArrayList<List<Integer>>();
getCombination(candidates, target, new ArrayList<Integer>(), ll);
return ll;
}
public void getCombination(int[] candidates, int target, List<Integer> temp, List<List<Integer>> ll) {
if (target == 0) {
List<Integer> res = new ArrayList<Integer>();
for (int a : temp) {
res.add(a);
}
for (List<Integer> l : ll) {
if (isSameList(temp, l)) {
return;
}
}
ll.add(res);
return;
} else if (target < 0) {
return;
} else {
for (int a : candidates) {
temp.add(a);
getCombination(candidates, target - a, temp, ll);
temp.remove(temp.size() - 1);
}
return;
}
}
public boolean isSameList(List<Integer> temp, List<Integer> l) {
if (temp.size() != l.size()) {
return false;
}
List<Integer> t = new ArrayList<Integer>();
for (int a : temp) {
t.add(a);
}
Collections.sort(t);
Collections.sort(l);
for (int i = 0; i < l.size(); i++) {
if (t.get(i) != l.get(i)) {
return false;
}
}
return true;
}
}