三数之和15 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465import java.util.List;import java.util.ArrayList;import java.util.Arrays;//三数之和15public class Threesum15 { public static void main(String[] args) { int[] nums = {-1,0,1,2,-1,-4}; List<List<Integer>> list = new Solution().threeSum(nums); for(List<Integer> itemList : list){ System.out.println(); for (Integer item : itemList) { System.out.print(item + "\t"); } } }}class Solution { public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> res = new ArrayList<>(); if (nums.length < 3) { return res; } //排序 Arrays.sort(nums); for(int i = 0; i < nums.length; i++){ //如果第一个就 > 0,那绝对凑不出来 三个 = 0 if (nums[i] > 0) { return res; } //对a去重 if (i > 0 &&nums[i] == nums[i - 1]) { continue; } int left = i + 1; int right = nums.length - 1; while(right > left){ int sum = nums[i] + nums[left] + nums[right]; if (sum < 0) { left++; }else if (sum > 0) { right--; }else if (sum == 0){ res.add(Arrays.asList(nums[i], nums[left], nums[right])); //后面两位去重 while (right > left && nums[right] == nums[right - 1]) right--; while (right > left && nums[left] == nums[left + 1]) left++; right--; left++; } } } return res; }} add 多复习几遍。这个题目确实棘手,尤其是去重处理。我能写出来,但是不知道为什么在哪里去重。 回滚JavaSE。关于JavaSE中间关于集合那段的语法有点忘了。只记得JavaSE最基础的if,when,while,for了。 我不知道引入什么包,这点有点寄。