題目描述:給定一個包含 n 個整數(shù)的數(shù)組nums,判斷nums中是否存在三個元素 a,b谨设,c ,使得a + b + c = 0 找出所有滿足條件且不重復(fù)的三元組缎浇。
示例:例如, 給定數(shù)組 nums = [-1, 0, 1, 2, -1, -4]扎拣,
滿足要求的三元組集合為:
[
? [-1, 0, 1],
? [-1, -1, 2]
]
java代碼:
class Solution {
? ? public List<List<Integer>> threeSum(int[] nums) {
? ? ? ? List<List<Integer>> ans = new ArrayList();
? ? ? ? Arrays.sort(nums);
? ? ? ? int len = nums.length;
? ? ? ? if (nums == null || len < 3) return ans;
? ? ? ? for (int i=0;i<len;i++) {
? ? ? ? ? ? if(nums[i]>0) break;
? ? ? ? ? ? if (i>0 && nums[i]==nums[i-1]) continue;
? ? ? ? ? ? int L = i + 1;
? ? ? ? ? ? int R = len - 1;
? ? ? ? ? ? while (L < R) {
? ? ? ? ? ? ? ? int sum = nums[i] + nums[L] + nums[R];
? ? ? ? ? ? ? ? if (sum == 0) {
? ? ? ? ? ? ? ? ? ? ans.add(Arrays.asList(nums[i],nums[L],nums[R]));
? ? ? ? ? ? ? ? ? ? while (L<R && nums[L] == nums[L+1]) L++;
? ? ? ? ? ? ? ? ? ? while (L<R && nums[R] == nums[R-1]) R--;
? ? ? ? ? ? ? ? ? ? L++;
? ? ? ? ? ? ? ? ? ? R--;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else if (sum < 0) L++;
? ? ? ? ? ? ? ? else if (sum > 0) R--;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return ans;
? ? }
}