思路
- 先对数组进行排序(增序)
- 设置3个值 low + mid + high,low从最小的数开始,mid从最小数+1开始,high从最大数开始
- 为了防止有重复的情况发生,比如 -1 -1 -1 0 2,我们利用set去重
- 结束遍历的几种情况
- 三个数相加等于0
- 最小数>0
- 最大数<0
- low+mid+high<0
public static void main(String[] args) {
int[] arr={-3,-2,-1,-1,-1,0,0,0,1,2,3,4,-10,8};
if(arr.length<3) return;
Arrays.sort(arr);
printArr(arr);
int length=arr.length;
//结束的条件
//1. 遍历到只剩下最后3个数为止
//2. arr[i]>0 最小的数 大于0
//3. arr[k]<0 最大的数小于0
//3个数 low+ mid + high <0
Set<String> result=new HashSet();
for(int i=0;i<length-2&&arr[i]<0;i++){
int low=arr[i];
for(int j=i+1;j<length-1;j++){
int mid=arr[j];
for(int k=length-1;k>j&&arr[k]>0&&low+mid+arr[k]>=0;k--){
int high=arr[k];
int sum=low + mid + high;
if(sum==0){
result.add(low+","+mid+","+high);
}
}
}
}
//check 3个零的情况
for(int zeroIndex=0;zeroIndex<length-2;zeroIndex++){
if(arr[zeroIndex]==0 && arr[zeroIndex+2]==0){
result.add(0+","+0+","+0);
break;
}
}
//迭代输出结果
Iterator<String> it = result.iterator();
while (it.hasNext()) {
String str = it.next();
System.out.println(str);
}
}
public static void printArr(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
网友评论