題目:
15. 三數之和 - 力扣(LeetCode)15. 三數之和 - 給你一個整數數組 nums ,判斷是否存在三元組 [nums[i], nums[j], nums[k]] 滿足 i != j、i != k 且 j != k ,同時還滿足 nums[i] + nums[j] + nums[k] == 0 。請你返回所有和為 0 且不重復的三元組。注意:答案中不可以包含重復的三元組。??示例 1:輸入:nums = [-1,0,1,2,-1,-4]輸出:[[-1,-1,2],[-1,0,1]]解釋:nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。不同的三元組是 [-1,0,1] 和 [-1,-1,2] 。注意,輸出的順序和三元組的順序并不重要。示例 2:輸入:nums = [0,1,1]輸出:[]解釋:唯一可能的三元組和不為 0 。示例 3:輸入:nums = [0,0,0]輸出:[[0,0,0]]解釋:唯一可能的三元組和為 0 。?提示: * 3 <= nums.length <= 3000 * -105 <= nums[i] <= 105http://link.dataword.cloud/1AwrSv
總結:
這個題還是比較難的,三數之和,兩數之和,看著差不多,但是要求呀這些還是很有差距的。題目描述就不多贅婿了。大家點擊我的短鏈接就能跳過去。
這個題的解法就是排序完,利用遞歸并定住一個數據,將三數之和變成,兩數之和,然后遞歸找解。
代碼示例:
?
public static List<List<Integer>> threeSum2(int[] nums){Arrays.sort(nums);List<List<Integer>> result = new LinkedList<>();dfs2(3, 0, nums.length - 1, 0, nums,new LinkedList<>(), result);return result;}public static void dfs2(int n//用來控制 遞歸的結束條件(找到結果有n 個數),int i//左邊界,int j//右邊界,int target//目標值,int[] nums,//數組LinkedList<Integer> stack,//固定的數List<List<Integer>> result//結果){if(n == 2){//遞歸結束標志。就剩兩個數據就沒必要繼續了twoSum2(i, j, nums, target, stack, result);return ;}for (int k = i; k < j; k++) {if(k>i && nums[k] == nums[k-1]){ //檢查 k 的有效邊界,以及檢查重復continue;}//固定一個數據stack.push(nums[k]);dfs2(n-1,k+1,j,target - nums[k],nums,stack,result);//彈出固定的方法stack.pop();}}//找解的核心方法static public void twoSum2(int i, int j, int[] nums, int target,LinkedList<Integer> stack,List<List<Integer>> result) {while(i<j){//保持邊界int sum = nums[i]+nums[j];//調整邊界if(sum < target){i++;} else if (sum > target) {j--;}else {//找到解ArrayList<Integer> list = new ArrayList<>(stack);list.add(nums[i]);list.add(nums[j]);result.add(list);//繼續找(調整邊界)i++;j--;//這兩個是在找重復的,自己和自己前一個重復就跳走,重復沒意義while (i < j && nums[i] == nums[i - 1]) {i++;}while (i < j && nums[j] == nums[j + 1]) {j--;}}}}
視頻講解:
進階數據結構和算法-332-三數之和-Leetcode15_嗶哩嗶哩_bilibili進階數據結構和算法-332-三數之和-Leetcode15是大廠必備數據結構與算法Java視頻教程(下篇),java高級程序員必學的數據結構與算法的第178集視頻,該合集共計200集,視頻收藏或關注UP主,及時了解更多相關視頻內容。http://link.dataword.cloud/3qCztX黑馬講解的很透徹,建議看看,💪