5. 子集Ⅱ
题目描述
给你一个整数数组nums,其中可能包含重复的元素。返回该数组所有可能的子集(幂集)。
解集不能包含重复的子集。返回的解集中,你可以按任意顺序返回解集。
题目链接
https://leetcode-cn.com/problems/subsets-ii/
复杂度分析
时间复杂度分析:
O(n * 1 << n)
一共1 << n个状态,每种状态需要O(n)的时间来构造子集。
空间复杂度分析:
O(n)
即构造子集使用的临时数组t的空间代价。
说明
在第一版子集的基础上,增加不能重复
示例: [4,4,4,1,4] 第一版的结果:(有重复) [[],[4],[4,4],[4,4,4],[1],[4,1],[4,4,1],[4,4,4,1],[4,4,4,4],[1,4],[4,1,4],[4,4,1,4],[4,4,4,1,4]] 增加排序后的结果:(无重复) [[],[1],[4],[1,4],[4,4],[1,4,4],[4,4,4],[1,4,4,4],[4,4,4,4],[1,4,4,4,4]]
将示例进行排序,排好序后,在按第一版操作即可。
代码
class Solution { List<Integer> t = new ArrayList<>(); List<List<Integer>> ans = new ArrayList<List<Integer>>(); public List<List<Integer>> subsetsWithDup(int[] nums) { int n = nums.length; Arrays.sort(nums); for (int i = 0; i < (1 << n); i++) { t.clear(); for (int j = 0; j < n; j++) { if ((i & (1 << j)) != 0) { t.add(nums[j]); } } if (!ans.contains(t)) { ans.add(new ArrayList<Integer>(t)); } } return ans; } }
本文来自博客园,作者:jsqup,转载请注明原文链接:https://www.cnblogs.com/jsqup/p/15842105.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?