其他分享
首页 > 其他分享> > 面试题 08.04. 幂集

面试题 08.04. 幂集

作者:互联网

题干

幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。

 

说明:解集不能包含重复的子集。

 

示例:

输入: nums = [1,2,3]
 输出:
[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/power-set-lcci

 

思路

backtrack的模板

private void backtrack("原始参数") {
    //终止条件(递归必须要有终止条件)
    if ("终止条件") {
        //一些逻辑操作(可有可无,视情况而定)
        return;
    }

    for (int i = "for循环开始的参数"; i < "for循环结束的参数"; i++) {
        //一些逻辑操作(可有可无,视情况而定)

        //做出选择

        //递归
        backtrack("新的参数");
        //一些逻辑操作(可有可无,视情况而定)

        //撤销选择
    }
}

写法

class Solution {
     public List<List<Integer>> subsets(int[] nums) {
        //结果集合
        List<List<Integer>> list = new ArrayList();
        //回溯方法
        backtrack(list,new ArrayList<>(),nums,0);
        return list;
    }
    public void backtrack(List<List<Integer>>list,List<Integer>tempList,int []nums,int start){
        list.add(new ArrayList<>(tempList));
        for(int i = start;i<nums.length;i++) {
            tempList.add(nums[i]);
            backtrack(list, tempList, nums, i + 1);
            tempList.remove(tempList.size() - 1);
        }
    }
}

 

标签:面试题,nums,backtrack,int,List,08.04,list,幂集,new
来源: https://www.cnblogs.com/ak918xp/p/14253027.html