【LeetCode每日一题】——90.子集 II
创始人
2024-02-13 19:11:38

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【解题思路】
  • 七【题目提示】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 数组

二【题目难度】

  • 中等

三【题目编号】

  • 90.子集 II

四【题目描述】

  • 给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。
  • 解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

五【题目示例】

  • 示例 1:

    • 输入:nums = [1,2,2]
    • 输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]
  • 示例 2:

    • 输入:nums = [0]
    • 输出:[[],[0]]

六【解题思路】

  • 本题是回溯算法(有重复)的典型应用,关于回溯问题(有重复)的处理步骤如下:
void backTracking(参数)
{if(终止条件){保存结果;return;}for(遍历从当前位置出发的所有“路径”){if(大于开始位置 && 当前元素和前一个元素相同){continue;}保存“路径”节点;backTracking(所需参数);回溯处理,删除上一步保存的“路径”节点,准备进行新的递归}
}
  • 本题也是这个处理步骤,只是不需要递归终止条件的设置,因为遍历完数组也相当于结束了
  • 最后返回结果即可

七【题目提示】

  • 1<=nums.length<=101 <= nums.length <= 101<=nums.length<=10
  • −10<=nums[i]<=10-10 <= nums[i] <= 10−10<=nums[i]<=10

八【时间频度】

  • 时间复杂度:O(n×2n)O(n×2^n)O(n×2n),其中nnn为输入数组的大小,因为共2n2^n2n种状态,每种状态需要O(n)O(n)O(n)的时间来构造
  • 空间复杂度:O(n)O(n)O(n),其中nnn为输入数组的大小

九【代码实现】

  1. Java语言版
package Array;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;/*** @Author: IronmanJay* @Description: 90.子集 II* @CreateTime: 2022-11-25  09:04*/
public class p90_SubsetsII {public static void main(String[] args) {int[] nums = {1, 2, 2};List> res = subsetsWithDup(nums);System.out.println("res = " + res);}public static List> subsetsWithDup(int[] nums) {Arrays.sort(nums);List> res = new ArrayList<>();List path = new ArrayList<>();dfs_back_p90_SubsetsII(nums, res, path, 0);return res;}public static void dfs_back_p90_SubsetsII(int[] nums, List> res, List path, int start) {res.add(new ArrayList<>(path));for (int i = start; i < nums.length; i++) {if (i > start && nums[i] == nums[i - 1]) {continue;}path.add(nums[i]);dfs_back_p90_SubsetsII(nums, res, path, i + 1);path.remove(path.size() - 1);}}}
  1. C语言版
#include
#includeint compare_p90_SubsetsII(const void *a, const void *b)
{return *(int *)a - *(int *)b;
}void dfs_back_p90_SubsetsII(int* nums, int numsSize, int** res, int* returnSize, int** returnColumnSizes, int* path, int pathSize, int start)
{res[*returnSize] = (int*)malloc(sizeof(int) * pathSize);memcpy(res[*returnSize], path, sizeof(int) * pathSize);(*returnColumnSizes)[*returnSize] = pathSize;(*returnSize)++;for (int i = start; i < numsSize; i++){if (i > start && nums[i] == nums[i - 1]){continue;}path[pathSize++] = nums[i];dfs_back_p90_SubsetsII(nums, numsSize, res, returnSize, returnColumnSizes, path, pathSize, i + 1);pathSize--;}
}int** subsetsWithDup(int* nums, int numsSize, int* returnSize, int** returnColumnSizes)
{qsort(nums, numsSize, sizeof(int), compare_p90_SubsetsII);*returnSize = 0;*returnColumnSizes = (int*)malloc(sizeof(int) * 10001);int** res = (int**)malloc(sizeof(int*) * 10001);int* path = (int*)malloc(sizeof(int) * numsSize);dfs_back_p90_SubsetsII(nums, numsSize, res, returnSize, returnColumnSizes, path, 0, 0);return res;
}/*主函数省略*/

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...