您的位置:首页 > 其它

LeetCode-3Sum

2015-10-11 12:34 211 查看
Given an array S of n integers, are there elements a, b, c in S such that a + b + c =
0? Find all unique triplets in the array which gives the sum of zero.

Note:

Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
The solution set must not contain duplicate triplets.

For example, given array S = {-1 0 1 2 -1 -4},

A solution set is:
(-1, 0, 1)
(-1, -1, 2)

方法一,三重循环

public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
Map<String,Boolean> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
for (int m = j +1; m < nums.length; m++) {
if (0 == nums[i] + nums[j] + nums[m]) {
List<Integer> element = new ArrayList<Integer>();
String s = null;
if (nums[i] < nums[j]) {
if (nums[m] < nums[i]) {
element.add(nums[m]);
element.add(nums[i]);
element.add(nums[j]);
s = "" + nums[m] + nums[i] + nums[j];
} else if (nums[m] > nums[j]) {
element.add(nums[i]);
element.add(nums[j]);
element.add(nums[m]);
s = "" + nums[i] + nums[j] + nums[m];
} else {
element.add(nums[i]);
element.add(nums[m]);
element.add(nums[j]);
s = "" + nums[i] + nums[m] + nums[j];
}
}
if (!map.containsKey(s)) {
result.add(element);
map.put(s, Boolean.TRUE);
}
}
}
}
}
return result;
}

方法二:
public class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
if ( nums.length < 3) {
return result;
}
Arrays.sort(nums);
Set<String> uniqueSet = new HashSet<String>();
for (int i = 0; i < nums.length - 2; i++) {
int left = i + 1;
int right = nums.length - 1;
while (left < right) {
if (left > i + 1 && nums[left] == nums[left-1]) {
++left;
continue;
}
if (right < nums.length - 2 && nums[right] == nums[right + 1]) {
--right;
continue;
}
int sum = nums[i] + nums[left] + nums[right];
if (0 == sum) {
String s = "" + nums[i] + nums[left] + nums[right];
if (!uniqueSet.contains(s)) {
List<Integer> ls = new ArrayList<>();
ls.add(nums[i]);
ls.add(nums[left]);
ls.add(nums[right]);
result.add(ls);
}
uniqueSet.add(s);
++left;
--right;
} else if (0 < sum) {
--right;
} else {
++left;
}
}
}
return result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: