题目
Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
从整数数组中找出三个数加起来等0,不能返回重复的
- Example
Given array nums = [-1, 0, 1, 2, -1, -4],
A solution set is:
[
[-1, 0, 1],
[-1, -1, 2]
]
由于数组中有可能存在重复的数,在排序后的数组中,它们是连在一起的,那么当找到第一对数值对的时候,继续找的时候,要判断下一个位置的数是否跟当前位置的置相同,如果相同,可忽略,因为这个值同样满足条件,但是其会造成重复的组合
var threeSum = function(nums) {
const triplets = [];
if (nums.length < 3) {
return triplets;
}
nums.sort((a, b) => (a - b));
for (let i = 0; i < nums.length - 2; i++) {
let a = nums[i];
// 防止重复的两个数连在一起,取到重复的结果,
if (nums[i - 1] !== undefined && nums[i] === nums[i - 1]) {
continue; // 相当于return,不会执行下面代码
}
let left = i + 1;
let right = nums.length - 1;
while (left < right) {
let b = nums[left];
let c = nums[right];
let sum = a + b + c;
if (sum === 0) {
triplets.push([a, b, c]);
while (nums[left] === nums[left + 1]) {
left++;
}
while (nums[right] === nums[right - 1]) {
right--;
}
left++;
right--;
} else if (sum > 0) {
right--;
} else {
left++;
}
}
}
return triplets;
};
- 关键
if (nums[i - 1] !== undefined && nums[i] === nums[i - 1]) {
continue;
}
[-1,0,1,2,-1,-4] // 排序后变成[-4, -1, -1, 0, 1 ,2]
不加上面代码结果:
[[-1,-1,2],[-1,0,1],[-1,0,1]]
加上面代码结果:
[[-1,-1,2],[-1,0,1]]
网友评论