中等 三数之和
19%
通过
给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。
Yes
样例
如S = {-1 0 1 2 -1 -4}, 你需要返回的三元组集合的是:
(-1, 0, 1)
(-1, -1, 2)
注意
在三元组(a, b, c),要求a <= b <= c。
结果不能包含重复的三元组。
public class Solution {
/**
* @param numbers : Give an array numbers of n integer
* @return : Find all unique triplets in the array which gives the sum of zero.
*/
public static ArrayList<ArrayList<Integer>> threeSum(int[] numbers) {
ArrayList<ArrayList<Integer>> arr = new ArrayList<ArrayList<Integer>>();
//ArrayList<Integer> ar = new ArrayList<Integer>();
int len =numbers.length;
Arrays.sort(numbers);
if(len<3)
return null;
for(int i=0;i<len-2;i++)
{
for(int j=i+1;j<len-1;j++)
{
for(int k=j+1;k<len;k++)
{
if(numbers[i]+numbers[j]+numbers[k]==0)
{
ArrayList<Integer> ar = new ArrayList<Integer>();
ar.add(numbers[i]);
ar.add(numbers[j]);
ar.add(numbers[k]);
arr.add(ar);
// System.out.println("cun chu+"+i+" "+j+" "+k);
}
else continue;
// System.out.println("------"+arr+"-------");
}
}
}
int i = 0;
while(i<arr.size()-1)
{
int j = i+1;
while(j<arr.size())
{
if(arr.get(i).equals(arr.get(j)))
arr.remove(j);
else j++;
}
i++;
}
return arr;
}
}