- 浏览: 183679 次
- 性别:
- 来自: 济南
文章分类
最新评论
Given a collection of integers that might contain duplicates, nums, return all possible subsets.
Note:
Elements in a subset must be in non-descending order.
The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,2], a solution is:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
这道题目是Subsets 的变形,数组中包含了重复的元素,之前介绍了两种方法,这里我们可以用同样的方法解决,只要多一个判断结果是否重复就可以了。代码如下:
1,位运算方法
2,回溯法
上面的代码都可以通过测试,但是我们还可以将我们的代码优化,在回溯的时候,如果后面的元素和前面的元素相同,我们就可以跳过这个元素,这样就大大提高了效率。代码如下:
Note:
Elements in a subset must be in non-descending order.
The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,2], a solution is:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
这道题目是Subsets 的变形,数组中包含了重复的元素,之前介绍了两种方法,这里我们可以用同样的方法解决,只要多一个判断结果是否重复就可以了。代码如下:
1,位运算方法
public class Solution { public List<List<Integer>> subsetsWithDup(int[] nums) { List<Integer> list; List<List<Integer>> result = new ArrayList<List<Integer>>(); if(nums == null || nums.length == 0) return result; java.util.Arrays.sort(nums); for(int i = 0; i < Math.pow(2, nums.length); i++) { list = new ArrayList<Integer>(); for(int j = 0; j < nums.length; j++) { if((i >> j & 1) == 1) list.add(nums[j]); } if(!result.contains(list)) result.add(list); } return result; } }
2,回溯法
public class Solution { public List<List<Integer>> subsetsWithDup(int[] nums) { LinkedList<Integer> list = new LinkedList<Integer>(); List<List<Integer>> result = new ArrayList<List<Integer>>(); if(nums == null || nums.length == 0) return result; java.util.Arrays.sort(nums); for(int i = 0; i <= nums.length; i++) { getSubset(0, i, nums, list, result); } return result; } public void getSubset(int start, int lth, int[] nums, LinkedList<Integer> list, List<List<Integer>> result) { if(list.size() == lth) { if(!result.contains(list)) result.add(new LinkedList<Integer>(list)); return; } for(int i = start; i < nums.length; i++) { list.add(nums[i]); getSubset(i + 1, lth, nums, list, result); list.removeLast(); } } }
上面的代码都可以通过测试,但是我们还可以将我们的代码优化,在回溯的时候,如果后面的元素和前面的元素相同,我们就可以跳过这个元素,这样就大大提高了效率。代码如下:
public class Solution { public List<List<Integer>> subsetsWithDup(int[] nums) { LinkedList<Integer> list = new LinkedList<Integer>(); List<List<Integer>> result = new ArrayList<List<Integer>>(); if(nums == null || nums.length == 0) return result; java.util.Arrays.sort(nums); getSubset(0, nums, list, result); return result; } public void getSubset(int index, int[] nums, LinkedList<Integer> list, List<List<Integer>> result) { if(index <= nums.length) { result.add(new LinkedList<Integer>(list)); } for(int i = index; i < nums.length; i++) { if(i != index && nums[i] == nums[i - 1]) continue; list.add(nums[i]); getSubset(i + 1, nums, list, result); list.removeLast(); } } }
发表评论
-
498. Diagonal Traverse
2019-11-15 13:52 265Given a matrix of M x N eleme ... -
496 Next Greater Element I
2019-11-14 13:50 267You are given two arrays (witho ... -
Word Break II
2016-03-09 03:15 384Given a string s and a dictiona ... -
Insert Interval
2016-03-08 02:11 374Given a set of non-overlapping ... -
Merge Intervals
2016-03-07 05:25 499Given a collection of intervals ... -
Merge k Sorted Lists
2016-03-07 04:03 563Merge k sorted linked lists and ... -
Multiply Strings
2016-03-06 07:27 475Given two numbers represented a ... -
N-Queens II
2016-03-06 03:06 664Follow up for N-Queens problem. ... -
N-Queens
2016-03-06 02:47 469The n-queens puzzle is the prob ... -
First Missing Positive
2016-03-05 03:09 430Given an unsorted integer array ... -
Spiral Matrix
2016-03-04 03:39 575Given a matrix of m x n element ... -
Trapping Rain Water
2016-03-04 02:54 581Given n non-negative integers r ... -
Repeated DNA Sequences
2016-03-03 03:10 426All DNA is composed of a series ... -
Increasing Triplet Subsequence
2016-03-02 02:48 898Given an unsorted array return ... -
Maximum Product of Word Lengths
2016-03-02 01:56 930Given a string array words, fin ... -
LRU Cache
2016-02-29 10:37 602Design and implement a data str ... -
Super Ugly Number
2016-02-29 07:07 676Write a program to find the nth ... -
Longest Increasing Path in a Matrix
2016-02-29 05:56 845Given an integer matrix, find t ... -
Coin Change
2016-02-29 04:39 783You are given coins of differen ... -
Minimum Height Trees
2016-02-29 04:11 706For a undirected graph with tre ...
相关推荐
python python_leetcode题解之090_Subsets_II
javascript js_leetcode题解之90-subsets-II.js
c语言基础 c语言_leetcode题解之0090_subsets_ii.zip
【Python LeetCode 面试题解之第78题 子集】 在LeetCode平台上的第78题,名为“Subsets”(子集),是...同时,也可以通过练习LeetCode上的其他相关题目,如“Subsets II”(子集II,考虑重复元素)来提升自己的能力。
本篇内容主要聚焦于JavaScript解决LeetCode中的第90题——"子集II"(Subsets II)的递归与回溯算法。 子集II问题要求我们找到一个给定整数数组的所有不重复子序列,且这些子序列中包含至少两个连续的数字。这个题目...
题目描述的是一个经典的编程问题,来源于LeetCode上的"子集II"(Subsets II,编号为101)题目。该问题要求找到一个整数数组中所有不含有重复元素的子集(幂集),并确保结果中不包含重复的子集。 在给定的代码中,...
10. **Subsets II .cpp** - 第90题“子集II”,要求找到一个集合的所有不重复子集,解冑通常使用递归或回溯法。 以上代码覆盖了算法设计中的多种重要思想,包括回溯法、动态规划、字符串处理、区间操作和深度/广度...
15. 在处理包含重复元素的问题时,如Subsets II,需要考虑如何避免生成重复的子集。 16. 动态规划(DP)和深度优先搜索(DFS)是解决算法问题的两种常用方法。动态规划可以用来解决0-1背包问题,而DFS则可以用于...
python python_leetcode题解之078_Subsets
javascript js_leetcode题解之78-subsets.js
c c语言_leetcode题解之0078_subsets.zip
c语言入门 C语言_leetcode题解之78-subsets.c
关于Banach空间中的超弱紧子集和其等价性,程立新,程庆进,类比于Banach空间中的弱紧集和超自反空间中子集的性质,本文目的是讨论Banach空间中凸和非凸子集的超弱紧性质。作为结果,本文给出了超�
java java_leetcode题解之Partition to K Equal Sum Subsets.java
标题中的"subsets"指的是集合的子集概念,这在编程中是一个常见的数学问题,特别是在算法和数据结构的学习中。子集是指一个集合中的所有可能的不重复元素组合。例如,如果集合是{1, 2, 3},它的子集包括空集、{1}、{...
标题提到的"subsets:用于子集字体的字符列表"是针对字体文件的一种处理方式,旨在提高性能和减小文件大小。当你只需要字体文件中的部分字符(比如特定语言的字母或符号)时,可以创建一个包含这些字符的子集,而不是...
用于训练所有子集的python脚本
本文讨论了Banach空间中的一致凸子集,并详细阐述了这一概念的相关性质。Banach空间是由波兰数学家斯特凡·Banach提出的一类完备的赋范向量空间,是泛函分析中的核心概念之一。在Banach空间理论中,一致凸性是判断...
var subsets = require ( 'subsets' ) ; var checks = 0 ; var sets = subsets ( [ 1 , 10 , 4 , 25 , 26 , 6 ] , function ( a , b ) { checks ++ ; return Math . abs ( a - b ) <= 3 ; } ) ; console . log ...