博文中会简要介绍Leetcode P0090题目分析及解题思路。
“Subsets II”是一道p0078变形题,也是深度优先搜索的问题。
Given a collection of integers that might contain duplicates, nums, return all possible subsets (the power set).
Note: The solution set must not contain duplicate subsets.
Example:
基本思路同样是每次枚举的子集大小,从0开始到n结束,针对每个给定的子集大小,深度优先搜索得到所有该大小的子集。需要注意的是,由于有重复元素,需要跳过那些重复元素的副本。
不难发现,类似这样的深度优先搜索问题,分成四大类,一种是纯粹递归问题,一种是探索问题,即判断合法性等,后两种分别是寻找组合和寻找排列。而寻找组合往往涉及到去重,并且每次以新元素作为探索起点时,前面探索中访问过的起点不再访问。寻找排列除了去重以外,每次以新元素作为探索起点时,在前面探索中访问过的起点,还可以继续访问。
以下是Java的题解代码实现。
以下是C++的题解代码实现。