LeetCode---15. 三數之和(java實現)
阿新 • • 發佈:2019-01-22
問題描述:
給定一個包含 n 個整數的陣列 nums
,判斷 nums
中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。
注意:答案中不可以包含重複的三元組。
例如, 給定陣列 nums = [-1, 0, 1, 2, -1, -4],
滿足要求的三元組集合為:
[
[-1, 0, 1],
[-1, -1, 2]
]
class Solution { public List<List<Integer>> threeSum(int[] nums) { if(nums == null){ return null; } //如果陣列長度小於3,返回一個空集合 if(nums.length < 3){ return new ArrayList<>(); } //對陣列nums進行排序 Arrays.sort(nums); HashSet<List<Integer>> set = new HashSet<>(); //讓i從陣列下標為0開始跑 for (int i = 0; i < nums.length; i++) { //j從i的後一個數開始 int j = i + 1; //k從陣列最後一個數(最大的數)往前跑 int k = nums.length - 1; while(j < k){ if(nums[i] + nums[j] + nums[k] == 0){ List<Integer> list = new ArrayList<>(); list.add(nums[i]); list.add(nums[j]); list.add(nums[k]); set.add(list); //當有重複的數字出現時,j往前跑,防止結果有重複 while(j < k && nums[j] == nums[j + 1]){ j++; } while(j < k && nums[k] == nums[k - 1]){ k--; } j++; k--; }else if(nums[i] + nums[j] + nums[k] < 0){ j++; }else{ k--; } } } return new ArrayList<>(set); } }
程式碼實現: