leetcode 78.子集

方法一: 

class Solution {
    private List> ans;
    private int n;
    private int[] nums;
    private List path;
    
    public List> subsets(int[] nums) {
        this.ans = new ArrayList>();
        this.n = nums.length;
        this.nums = nums;

        this.path = new ArrayList();
        dfs(0);
        return ans;
    }

    private void dfs(int depth) {
        if (depth == n) {
            ans.add(new ArrayList(path)); // 这一步我出错了,直接写add(path)是不对的,因为path是引用,最终path会为空
            return;
        }

        dfs(depth + 1);

        path.add(nums[depth]);

        dfs(depth + 1);
        path.remove(path.size() - 1);
        return; 
    }
}

方法二:

class Solution {
    private List> ans;
    private int n;
    private int[] nums;
    private List path;
    
    public List> subsets(int[] nums) {
        this.ans = new ArrayList>();
        this.n = nums.length;
        this.nums = nums;

        this.path = new ArrayList();
        dfs(0);
        return ans;
    }

    private void dfs(int depth) {
        ans.add(new ArrayList(path));
        if (depth == n) {
            return;
        }

        for(int i = depth; i < n; i++) {
            path.add(nums[i]);

            dfs(i + 1);
            path.remove(path.size() - 1);
        }
            
        return; 
    }
}

你可能感兴趣的:(Java算法笔记,leetcode,算法,职场和发展)