//现将数组进行升序排序,对等于0的情况比较去重.....
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
Arrays.sort(nums);
int j,k;
//System.out.println(Arrays.toString(nums));
for(int i=0; i<nums.length-2; i++) {
j = nums.length-1;
k = i + 1;
//第一层判断
if(nums[i] > 0) break;
if(i>0 && nums[i] == nums[i-1]) continue; //如果第二个i和第一个i相同就不必循环
while(k < j) {
if (nums[i] + nums[j] + nums[k] == 0) {
List<Integer> it = Arrays.asList(nums[i],nums[j],nums[k]);
result.add(it);
while(k<j && nums[k] == nums[k+1]) k++;
while(k<j && nums[j] == nums[j-1]) j--;
k++;
j--;
} else if (nums[i] + nums[j] + nums[k] < 0) {
k++;
} else {
j--;
}
}
}
return result;
}
}
public class test {
public static void main(String[] args) {
int[] nums = {-1, 0, 1, 2, -1, -4};
Solution s = new Solution();
List<List<Integer>> list = new ArrayList<>();
list = s.threeSum(nums);
System.out.println(list.toString());
}
}
补充:
摘录:https://www.cnblogs.com/shanheyongmu/p/6364320.html
Arrays.asList(......) :将数组转化为list
注意:该方法不适用于基本数据类型数组;改方法将数组与列表链接起来,当更新其中之一时,另一个自动更新;不支持add和remove方法