2023-11-08
此篇文章是刚开始做这道题时的错误想法,正确想法请看2,这是1.
思路:
1 暴力法
2 利用哈希表将3层循环转为2层
上面的方法会有去重问题:
class Solution { public List<List<Integer>> threeSum(int[] nums) { //三者都不相同,和为0 //可以作为i》j》k 不影响的 //可能有多个 //暴力法 3层循环,有点bt //借用哈希表,变为2层循环 List<List<Integer>> res=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){ ArrayList<Integer> now=new ArrayList<>(); now.add(nums[i]); now.add(nums[j]); now.add(nums[k]); if(!res.contains(now)){ res.add(now); } } } } } return res; //会有去重问题 //可以进一步思考-》nums[i]<=nums[j]<=nums[k] //进一步思考-》可以先将数组就行排序 } }
标签:15,nums,三数,add,res,now From: https://www.cnblogs.com/youye9527/p/17818455.html