考题
出处: 子集
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
输入: nums = [1,2,3]
输出:[[3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]
分析
首先 过滤掉重复元素
, 然后从 0 ~ array.length
之间找到所有组合即可。很容易会想到递归,但是网上找到了全排列的代码,到长一点的用例的时候出现了执行时间超限的问题,效率低,但是这种类型的场景和算法还是有必要记一下。后来从另一篇博客发现了用01组合来选取C(m,n)的方法,只要循环即可,不需要递归,性能也不错。
- 递归全排列 Java实现排列A(m,n)
对于递归的关键代码:
/**
*
* @param prefix 拼接结果前缀
* @param total 需要从N个数中取total个数
* @param list 含有N个数的集合
*/
public void recursive(String prefix,int total, List<String> list) {
//总的要循环多少次