代码没有输出结果,求解答
这个是leetcode第15题3sum。找出三个数和为0已经解决了。但问题是,我想在main函数中写用于测试threeSum函数的代码
即能实现通过键盘手动输入一串数用于验证,来代替在main函数中定义数组。
另外不知道如何输出threeSum中返回的List<List<Integer>> 类型的ret结果。
能解释下List<List<Integer>> 这个泛型吗,我自己最多只看到List<Integer>。谢谢
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class leetCode15 {
List<List<Integer>> ret = new ArrayList<List<Integer>>();
public void main(String[] args) {
// TODO Auto-generated method stub
int[] test1=new int[]{-1,0,1,2,-1,-4};
ret=threeSum(test1);
ret.forEach(ele -> System.out.println(ele));
}
//List<Integer>:list只能接收Integer的对象.
public List<List<Integer>> threeSum(int[] nums) {
if(nums==null ||nums.length<3)
return ret;
Arrays.sort(nums);
int len=nums.length;
for(int i=0;i<len-2;i++){
if(i>0 &&nums[i]==nums[i-1])
continue;
find(nums,nums[i],i+1,len-1);//寻找两个数和这个数加起来和为0
}
return ret;
}
public void find(int[] nums,int target,int start,int end){
int l=start;
int r=end;
while(l<r){
if(nums[l]+nums[r]+target==0){
List<Integer> ans = new ArrayList<Integer>();
ans.add(target);
ans.add(nums[l]);
ans.add(nums[r]);
ret.add(ans);
while(l<r &&nums[l]==nums[l+1]) l++;//去重
while(l<r && nums[r]==nums[r-1]) r--;//去重
l++;
r--;
}
else if (nums[l]+nums[r]+target<0){
l++;
}
else
r--;
}
}
}