您的位置:首页 > 其它

LeetCode:15. 3Sum

2017-12-10 20:32 423 查看


自己的解法,有问题,花费我三个小时

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Sum3 {
public static void main(String[] args) {
int[] S = new int[]{-4,-2,-2,-2,0,1,2,2,2,3,3,4,4,6,6};
List<List<Integer>> list2 = threeSum(S);
for (int i = 0; i < list2.size(); i++) {
System.out.println(list2.get(i));
}
}

public static List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> list2 = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
for (int j = i+1; j < nums.length; j++) {
for (int k = j+1; k < nums.length; 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]);
list2.add(list);
}
}
}
}
for (int i = list2.size() - 1; i >= 1; i--) {
for (int j = i-1; j >= 0; j--) {
if (list2.get(i).get(0) == list2.get(j).get(0)
&& list2.get(i).get(1) == list2.get(j).get(1)
&& list2.get(i).get(2) == list2.get(j).get(2)) {
list2.remove(j);
i--;
}
}
}
return list2;
}
}

 

 网上的解法

public static List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> list = new ArrayList<List<Integer>>();
if (nums == null || nums.length == 0)
return list;
Arrays.sort(nums);

for (int i = 0; i < nums.length; i++) {
if(i-1>=0&&nums[i]==nums[i-1]) continue;
int left = i+1;
int right = nums.length-1;
while(left<right){
int sum =nums[i]+nums[left]+nums[right];
if(sum==0){
list.add(Arrays.asList(nums[i],nums[left],nums[right]));
while(left+1<right&&nums[left]==nums[left+1]){  //left左右相同的话,就往右移动
left++;
}
while(left+1<right&&nums[right]==nums[right-1]){
right--;
}
left++;       //排除左右相同的影响,向右移动
right--;

}else if(sum<0){
left++;
}else{
right--;
}
}

}
return list;
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: