当前位置: 首页 > news >正文

LeetCode 第78题:子集

给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集。

解集不能包含重复的子集。你可以按任意顺序返回解集。

示例1:

输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

示例2:

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

提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10
  • nums 中的所有元素 互不相同

解题思路:

迭代法实现子集枚举:记录序列中元素的总数为n,原序列中的每个数字ai的状态可能有两种,在子集中和不在子集中。用1代表在子集中,0代表不在子集中。每一个子集可以对应一个长度为n的0/1序列,第i位表示ai是否在子集中。例如:n=3,a={5,2,9}

0/1 序列    子集    0/1 序列对应的二进制数
000    {}    0
001    {9}    1
010    {2}    2
011    {2,9}    3
100    {5}    4
101    {5,9}    5
110    {5,2}    6
111    {5,2,9}    7

枚举mask∈【0,2^n-1】,mask的二进制表示一个0/1序列,按照这个0/1序列在原集合当中取数。

int** subsets(int* nums,int numsSize,int* returnSize,int** returnColumnSizes)
{int** ans =malloc(sizeof(int*) * (1<<numsSize));*returnColumnSizes = malloc(sizeof(int)*(1<<numsSize));*returnSize = 1<<numsSize;int t[numsSize];for(int mask = 0;mask<(1<<numsSize);mask++){int tSize = 0;for(int i=0;i<numsSize;i++){if(mask & (1<<i))   t[tSize++] = nums[i];}int* tmp = malloc(sizeof(int) * tSize);memcpy(tmp, t, sizeof(int) * tSize);(*returnColumnSizes)[mask] = tSize;ans[mask] = tmp;}return ans;
}

子集数量一共是2^n个,包括空集和本身集合。

  • 首先计算出2^n是多少
  • for循环进行i递增,从0到2^n-1,将每个数字转换为二进制数字
  • 将二进制数字每一位的数字对应输出。每一轮循环输出一组数组,即子集。

相关文章:

  • 基于Python爬虫的房价可视化
  • 统信UOS 操作系统源码制作openssh 10.0p2 rpm包——筑梦之路
  • springboot速通
  • 如何用ai设计测试
  • 多线程并发编程硬核指南:从互斥锁到生产者模型的全场景实战与原理揭秘
  • c语言学习_函数4
  • 如何在软件公司推行狼性文化?可能存在哪些困难?
  • 手机SIM卡通话中随时插入录音语音片段(Windows方案)
  • 自然语言处理NLP 学习笔记
  • 【狂飙AGI】第5课:前沿技术-文生图(系列1)
  • MIT线性代数第一讲笔记
  • 适合 Acrobat DC 文件类型解析
  • Windows平台轻量级图片处理工具实测:功能与体验分享
  • 嵌入式知识篇---三种坐标系
  • ZW3D 二次开发-制作插件
  • 动态规划之爬楼梯(二)
  • SQL Developer 表复制
  • Vue相关知识2
  • 【嵌入式ARM汇编基础】-快速了解ARM汇编语言
  • 耗时3小时,把这两天做好的爬虫程序,用Python封装成exe文件
  • 建立网站需要哪些/seo引擎搜索入口
  • wordpress主题中文主题下载/seo快速排名上首页
  • 做网站帮外国人淘宝/点金推广优化公司
  • 上海做网站的公司多少钱/百度网盘人工客服电话多少
  • 一个网站有哪些优势/百度一下电脑版
  • 哪些网站做的比较好的/独立站怎么搭建