您的位置:首页 > 编程语言 > Java开发

[LeetCode] 15. 3Sum java

2017-03-08 18:00 435 查看
/**15. 3Sum
* @param nums
* @return
*/
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> list = new ArrayList<List<Integer>>();
Arrays.sort(nums);
for (int i = 0; i < nums.length-2; i++) {
if (i > 0 && nums[i] == nums[i-1]) {
continue;
} else {
int s = i+1;
int e = nums.length-1;
int num = nums[i];
while (s < e) {
if (nums[s] + nums[e] == -num) {
List<Integer> l = new ArrayList<Integer>();
l.add(num);
l.add(nums[s]);
l.add(nums[e]);
list.add(l);
while(s < nums.length-2 && nums[s] == nums[s+1]) {
s++;
}
while(e > 0 && nums[e] == nums[e-1]) {
e--;
}
s++;
e--;
}else if (nums[s] + nums[e] > -num) {
e--;
}else if (nums[s] + nums[e] < -num) {
s++;
}

}
}
}
return list;
}


//先找一个a,然后在剩下的里面枚举-a,利用s和e表示枚举时开始和结束,每次移动s或e,注意去除重复
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode java arraylist