leetcde: Subsets

做法有很多,我采取的思路也很简单,就是简单的递归....先将数组排序,按照顺序每次插入一个数字并将当前的排列插入结果集合.....最后返回的即是全排列。

但是!!!   一直都是TLE,而且出错的数据也不大......找了半天原因后来发现自己经常忽略的一点!!!!  JAva传递的都是对象,所以在递归和插入结果集合的时候我们不能直接将

当前List插入(因为其可能在之后的递归中被修改),应该新建一个或clone来插入或递归.......



public class Solution {
    List<List<Integer>> res = new ArrayList<List<Integer>>();
    public List<List<Integer>> subsets(int[] S) {
        Arrays.sort(S);
        List<Integer> tmp = new ArrayList<Integer>();
        fun(tmp,S,0,0);
        return res;
    }
    void fun(List<Integer> tmp,int[] S,int count,int dep)
    {
        res.add(tmp);
        int num = S.length;
        if(dep==num)
        {
            return ;
        }
        for(int i=count;i<num;i++)
        {
            List<Integer> ttt = new ArrayList(tmp);
            ttt.add(S[i]);
            fun(ttt,S,i+1,dep+1);
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值