Subsets

  • 迭代版

public class Solution {
    
    /*
     * @param nums: A set of numbers
     * @return: A list of lists
     */
    public List<List<Integer>> subsets(int[] nums) {
        // List vs ArrayList (google)
        List<List<Integer>> results = new ArrayList<>();
        
        if (nums == null) {
            return results; // 空列表
        }
        
        Arrays.sort(nums);
        
        // BFS
        Queue<List<Integer>> queue = new LinkedList<>();
        queue.offer(new LinkedList<Integer>());
        
        while (!queue.isEmpty()) {
            List<Integer> subset = queue.poll();
            results.add(subset);
            
            for (int i = 0; i < nums.length; i++) {
                if (subset.size() == 0 || subset.get(subset.size() - 1) < nums[i]) {
                    List<Integer> nextSubset = new LinkedList<Integer>(subset);
                    nextSubset.add(nums[i]);
                    queue.offer(nextSubset);
                }
            }
        }
        return results;
    }
}
  • 递归版

class Solution {
    public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> result = new ArrayList<>();
        List<Integer> path = new ArrayList<>();
        result.add(path);
        helper(nums, path, result, 0);
        return result;
    }
    public void helper(int[]nums, List<Integer>path, List<List<Integer>> result, int start){
        for(int i = start; i < nums.length; i++){
            if(path.contains(nums[i])) continue;
            path.add(nums[i]);
            result.add(new ArrayList<>(path));
            helper(nums, path, result, i + 1);
            path.remove(path.size() - 1);
        }
    }
}

最后更新于

这有帮助吗?