| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 565 人关注过本帖
标题:代码没有输出结果,求解答
只看楼主 加入收藏
so_closely
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-7-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
代码没有输出结果,求解答
这个是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--;

        }
    }

}
搜索更多相关主题的帖子: public import 键盘 如何 public import 键盘 如何 
2015-09-27 15:13
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
两重列表而已,一层一层的看

一片落叶掉进了回忆的流年。
2015-09-27 16:19
sunfragrance
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2014-4-17
收藏
得分:0 
debug,这招很重要
2015-09-29 15:44
calix
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:249
专家分:1442
注 册:2015-5-4
收藏
得分:20 
程序代码:
List<List<Integer>>表示该类集合的每个元素都是List<Integer>类型的数据,List<List<List<Integer>>>就表示每个元素都是List<List<Integer>>类型的。。。以此类推,不过一般不会用这么复杂的类型
main方法是static的,所以在main方法中不能直接调用非static方法和属性,解决办法:将要调用的属性和方法也改成static或new一个对象进行调用
ret.forEach(ele -> System.out.println(ele));//java中forEach不是这样写的
下面代码仅供参考

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class leetCode15 {
    static List<List<Integer>> ret = new ArrayList<List<Integer>>();
    public static void main(String[] args) {
        int[] test1=new int[]{-1,0,1,2,-1,-4};
        ret=threeSum(test1);
        for(List<Integer> ele : ret){
            System.out.println(ele);
        }
    }
    //List<Integer>:list只能接收Integer的对象.
    public static 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 static 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--;
        }
    }
}



[ 本帖最后由 calix 于 2015-9-29 17:25 编辑 ]
2015-09-29 17:21
快速回复:代码没有输出结果,求解答
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020973 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved