此篇文章是刚开始做这道题时的错误想法,正确想法请看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]
//进一步思考-》可以先将数组就行排序
}
}