0
点赞
收藏
分享

微信扫一扫

子集

Sophia的玲珑阁 2021-09-18 阅读 52
今日算法
题目描述:
思路:

非常典型的递归题目,全量遍历即可。

class Solution {
    public List<List<Integer>> listss = new ArrayList();
    public List<Integer> lists = new ArrayList();
    public List<List<Integer>> subsets(int[] nums) {
       dfs(0, nums);
       return listss;
    }
    public void dfs(int start, int[] nums) {
        listss.add(new ArrayList(lists));
        for (int i = start; i < nums.length; i++) {
            lists.add(nums[i]);
            dfs(i + 1, nums);
            lists.remove(lists.size() - 1);
        }
    }
}

class Solution {
    public List<List<Integer>> subsets(int[] nums) {
       List<List<Integer>> listss = new ArrayList<>();
            List<Integer> lists = new ArrayList<>();
            Stack<List<Integer>> stack = new Stack<>();
            stack.push(lists);
            listss.add(lists);
            for(int i = 0; i < nums.length; i++) {
                while(!stack.isEmpty()) {
                    List<Integer> list = stack.pop();
                    List<Integer> listTwo = new ArrayList<>(list);
                    listTwo.add(nums[i]);
                    listss.add(listTwo);
                }
                for(int j = 0; j < listss.size(); j++) {
                    stack.push(listss.get(j));
                }
            }
            return listss;
    }
}
class Solution {
    public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> listss = new ArrayList<>();
        List<Integer> lists = new ArrayList<>();    
        listss.add(lists);
       
        for(int i = 0; i < nums.length; i++) {
            int length = listss.size();
            for(int j = 0; j < length; j++) {
                List<Integer> list = listss.get(j);
                List<Integer> listTwo = new ArrayList<>(list);
                listTwo.add(nums[i]);
                listss.add(listTwo);
            }
        }
        return listss;
    }
}
举报

相关推荐

0 条评论