public ArrayList<ArrayList<Integer>> fourSum(int[] num, int target) {
if (num == null || num.length < 4)
return new ArrayList<ArrayList<Integer>>();
Arrays.sort(num);
return genericSumSorted(num, target, 0, num.length, 4);
}
public ArrayList<ArrayList<Integer>> genericSumSorted(int[] num,
int target, int offSet, int len, int numToSum) {
int loopMax = len - numToSum + 1;
ArrayList<ArrayList<Integer>> rv = new ArrayList<ArrayList<Integer>>();
if (numToSum == 1) {
for (int i = offSet; i < loopMax; i++) {
if (num[i] == target) {
ArrayList<Integer> newSet = new ArrayList<Integer>();
newSet.add(num[i]);
rv.add(newSet);
break;
}
}
} else {
int lastValue = num[offSet] - 1;
for (int i = offSet; i < loopMax; i++) {
if (num[i] == lastValue)
continue;
lastValue = num[i];
int newTarget = target - num[i];
ArrayList<ArrayList<Integer>> sub = genericSumSorted(num,
newTarget, i + 1, len, numToSum - 1);
for (ArrayList<Integer> subDetail : sub) {
subDetail.add(0, lastValue);
rv.add(subDetail);
}
}
}
return rv;
}
2013년 12월 7일 토요일
4Sum
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기