【LeetCode每日一题】——90.子集 II

news2025/8/10 3:18:57

文章目录

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

一【题目类别】

  • 数组

二【题目难度】

  • 中等

三【题目编号】

  • 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 < = n u m s . l e n g t h < = 10 1 <= nums.length <= 10 1<=nums.length<=10
  • − 10 < = n u m s [ i ] < = 10 -10 <= nums[i] <= 10 10<=nums[i]<=10

八【时间频度】

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

九【代码实现】

  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<List<Integer>> res = subsetsWithDup(nums);
        System.out.println("res = " + res);
    }

    public static List<List<Integer>> subsetsWithDup(int[] nums) {
        Arrays.sort(nums);
        List<List<Integer>> res = new ArrayList<>();
        List<Integer> path = new ArrayList<>();
        dfs_back_p90_SubsetsII(nums, res, path, 0);
        return res;
    }

    public static void dfs_back_p90_SubsetsII(int[] nums, List<List<Integer>> res, List<Integer> 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<stdio.h>
#include<stdlib.h>

int 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语言版
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/33973.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

有没有把语音转为文字的软件?这几个转换软件你值得收藏

我们在日常的工作和生活中&#xff0c;应该经常会遇到需要将音频转换成文字的情况吧。相信大部分的小伙伴都会选择直接使用转换软件进行音频转文字的操作&#xff0c;但在使用的过程中就会发现&#xff0c;有些软件会在使用次数、音频时长上面有所限制&#xff0c;导致我们会转…

【文件格式_XML_HTML_】XML、HTML文件

HTML xml what&#xff1f; XML是被设计用来存储数据、携带数据和交换数据的&#xff0c;通过XML&#xff0c;可以在不兼容的系统之间交换数据&#xff0c;利用XML&#xff0c;纯文本文件可以用来存储数据。在不使用XML时&#xff0c;HTML用于显示数据&#xff0c;数据必须存…

python面向对象(上)

python面向对象上命名规则对象的创建创建类对象创建实例对象修改增加类属性构造方法构造实例方法不带变量带变量构造方法小例子构造类方法构造静态方法运算符的重载比较运算符重载字符串重载索引或切片重载索引或切片重载检查成员重载重载小结持续更新中~~~~~~~~先上个例子&…

莫名其妙: conda使用过程各种错误及总结

conda真的很烦呢&#xff0c;有啥好用的&#xff0c;要不是准备学习一下虚拟环境&#xff0c;我才不折腾呢&#xff0c;浪费好多时间&#xff0c;(&#xff1b;′⌒) 不要挂代理&#xff0c;我怎么知道为什么&#xff0c;和pip一样&#xff0c;不过后来不知道为什么pip很流畅c…

知识蒸馏(Knowledge Distillation)

0.Introduction 知识蒸馏&#xff08;Knowledge Distillation&#xff0c;简记为 KD&#xff09;是一种经典的模型压缩方法&#xff0c;核心思想是通过引导轻量化的学生模型“模仿”性能更好、结构更复杂的教师模型&#xff08;或多模型的 ensemble&#xff09;&#xff0c;在…

第3章:中文本文向量化——代码详解

1.单条语句的向量化 根据不同的向量化&#xff0c;对“中华女子学院&#xff1a;本科层次仅1专业招男生”这句话进行向量化 1.1 One-hot方法 # one-hot代码 import jieba import os import numpy as npstopwords open(./data/哈工大停用词表.txt).read().split("\n&qu…

物联网安全年报暴露情况分析

暴露情况分析 在去年研究的基础上&#xff0c;我们今年对 UPnP 协议的暴露情况进行持续关注。如无特殊说明&#xff0c;本章中的 统计数据基于全球单轮次的测绘&#xff08;2019 年 10 月&#xff09;。本节我们将对 SSDP 与 SOAP服务的暴露情况进行 分析&#xff0c;4.4.2 节…

图床项目架构与设计

分布式文件服务系统架构与设计 该项目利用FastDFS分布式文件系统以及集群等技术提供统一的接口对外提供文件存储和访问服务&#xff0c;使用户能够通过网络访问服务端的文件资源&#xff0c;满足海量数据存储的需求 架构 项目采用B/S模型&#xff0c;服务端与浏览器进行交互&a…

论文阅读-Detecting and Recovering Sequential DeepFake Manipulation(SeqFakeFormer)

一、论文信息 论文名称&#xff1a;Detecting and Recovering Sequential DeepFake Manipulation&#xff08;篡改序列检测还原&#xff09; 论文链接: https://arxiv.org/pdf/2207.02204.pdf 项目主页: https://rshaojimmy.github.io/Projects/SeqDeepFake GitHub: https:…

Linux 最近学习总结

Linux 最近学习总结一.基础命令一.基础命令 基础命令就像是锤子、螺丝刀、锯等木匠常用到的工具&#xff0c;也是我们每天都会用到的命令 1.ls 列出当前所在目录的内容 2.ls 文件夹名 列出其他文件夹内容 3.ls ~ 其中~代表home目录 4.ls ~/Desktop/Java电子书/*.pdf 使用…

Eigen Segmentation fault (core dumped)

不会GDB吃大亏问题描述&#xff1a;解法&#xff1a;写在前面的话&#xff1a;我是PCL新手。也是Cmake新手。Eigen有点折腾人。 问题描述&#xff1a; 在调用PCL库实现一些有趣的功能&#xff0c;考虑到考虑到兼容不同平台&#xff0c;现状如下&#xff1a; VS2015&#xff1…

JavaScript基本语法详解

目录 一、JavaScript数据类型 二、算术运算符 1&#xff1a;分支结构 &#xff08;1&#xff09;if语句 &#xff08;2&#xff09;if...else语句 &#xff08;3&#xff09;if..else if语句 2&#xff1a;循环结构 &#xff08;1&#xff09;for循环 &#xff08;2&a…

ipv6地址概述——了解ipv6地址

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。个人爱好: 编程&#xff0c;打篮球&#xff0c;计算机知识个人名言&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石…

[ Linux ] 进程间通信之共享内存

在上篇博文我们了解了通过管道完成进程间通信&#xff0c;我们了解匿名管道和命名管道&#xff0c;并且通过编码模拟实现使用了匿名管道和命名管道。我们知道要让进程间完成通信必须让这两个进程首先看到同一份资源&#xff0c;因此给予这个前提&#xff0c;本篇博文我们了解另…

【Linux】自动化构建工具-make/Makefile第一个小程序

大家好我是沐曦希&#x1f495; 文章目录一.项目自动化构建工具-make/Makefile1.背景2. 举例3. 原理4. 总结5. 项目清理6. 习题习题一习题二二.第一个小程序&#xff0d;进度条1.行缓冲区2.倒计时3.进度条一.项目自动化构建工具-make/Makefile 1.背景 会不会写makefile&#x…

使用 elasticdump 跨版本迁移 ES 数据

1、elasticdump 用途介绍 elasticdump 是一个在 Github 开源的 Elasticsearch 的数据迁移工具&#xff0c;项目 Github 地址&#xff1a;[传送门](Github 地址&#xff1a;https://github.com/elasticsearch-dump/elasticsearch-dump) elasticdump 支持跨版本导出和导入数据&am…

【java进阶07:常用类】String类、包装类、日期类Date、数字类、随机数、枚举类型

String类 String类型的字符串存储原理 /*关于java JDK中内置的一个类&#xff1a;java.util.String1、String表示字符串类型&#xff0c;属于引用数据类型&#xff0c;不属于基本数据类型。2、在java中随便使用双引号括起来的都是String对象&#xff0c;例如&#xff1a;"…

零基础上手unity VR开发【配置PC端项目的实时调试】

&#x1f4cc;个人主页&#xff1a;个人主页 ​&#x1f9c0; 推荐专栏&#xff1a;Unity VR 开发成神之路 --【着重解决VR项目开发难&#xff0c;国内资料匮乏的问题。从零入门&#xff0c;一步一个脚印&#xff0c;带你搞定VR开发! &#x1f63b;&#x1f63b;】 &#x1f4d…

聊一聊如何截获 C# 程序产生的日志

一&#xff1a;背景 1.讲故事 前段时间分析了一个dump&#xff0c;一顿操作之后&#xff0c;我希望用外力来阻止程序内部对某一个com组件的调用&#xff0c;对&#xff0c;就是想借助外力实现&#xff0c;如果用 windbg 的话&#xff0c;可以说非常轻松&#xff0c;但现实情况…

当下互联网行业趋势,你顶得住吗?

持续三年的疫情导致经济形式大不如前&#xff0c;特别是互联网行业&#xff0c;不少员工面临着失业的压力&#xff0c;在如此恶劣的大环境下&#xff0c;计算机行业的我们应该如何生存&#xff1f;有一个很好的办法就是 —— 考证&#xff01;&#xff01;&#xff01;如今越来…