- 题目描述:
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不
重复的三元组。
注意:答案中不可以包含重复的三元组。
- 示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
- 解法一:参考链接:https://leetcode-cn.com/problems/3sum/solution/pai-xu-shuang-zhi-zhen-zhu-xing-jie-shi-python3-by/
#Python
class Solution(object):
def threeSum(self, nums):
n = len(nums)
res = []
if not nums and n < 3:
return res
nums.sort()
for i in range(0, n): #外层循环,定位
if nums[i] > 0: break
if i > 0 and nums[i] == nums[i - 1]: continue
L = i + 1
R = n - 1
while L < R: #内层循环, 定值
temp = nums[i] + nums[L] + nums[R]
if temp == 0:
res.append([nums[i], nums[L], nums[R]])
while (L < R) and (nums[L] == nums[L + 1]):
L += 1
while (L < R) and (nums[R] == nums[R - 1]):
R -= 1
L=L+1
R=R-1
elif(temp>0):
R=R-1
else:
L=L+1
return res
//Java
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
int len = nums.length;
List<List<Integer>> res = new ArrayList<>();
Arrays.sort(nums);
for (int i = 0; i < len; i++) {
if(nums[i] > 0) return res;
if(i > 0 && nums[i] == nums[i-1]) continue;
int L = i + 1;
int R = len - 1;
while(L <R){
int temp = nums[i] + nums[L] + nums[R];
if(temp == 0){
List<Integer> list = new ArrayList<>();
list.add(nums[i]);
list.add(nums[L]);
list.add(nums[R]);
res.add(list);
while(L < R && nums[L] == nums[L + 1]) ++L;
while(L < R && nums[R] == nums[R - 1]) --R;
++L;
--R;
}
else if(temp < 0) ++L;
else if(temp > 0) --R;
}
}
return res;
}
}