Note: The solution set must not contain duplicate triplets.java
For example, given array S = [-1, 0, 1, 2, -1, -4], A solution set is: [ [-1, 0, 1], [-1, -1, 2] ]
思路:循環法,先給數組排序->[-4,-1,-1,0,1,2],其中i,j,k三數的下標,i先爲最左邊的一個數,則i<n-3,此時能夠根據求兩數之和的方法來進行求解;
對一個有序的數組求兩數之和爲定值,最簡單的方法爲j,k分別爲數組的兩端,主鍵向中間靠攏;
具體代碼以下:
import java.util.*; public class Solution { public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> lists = new ArrayList<>(); if(nums==null||nums.length==0) return lists; Arrays.sort(nums); int n = nums.length; int i=0; while(i<=n-3){ int j=i+1; int k = n-1; while(j<k){ if(nums[i]+nums[j]+nums[k]==0){ ArrayList<Integer> list = new ArrayList<Integer>(); list.add(nums[i]); list.add(nums[j]); list.add(nums[k]); lists.add(list); while(j<k&&nums[j]==nums[j+1]) j++; while(k>j&&nums[k]==nums[k-1]) k--; j++; k--; }else if(nums[i]+nums[j]+nums[k]<0){ j++; }else{ k--; } } while(i<n-1&&nums[i]==nums[i+1]) i++; i++; } return lists; } }