地址:

力扣https://leetcode-cn.com/problems/TVdhkn/

题目:

给定一个整数数组 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 中的所有元素 互不相同

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/TVdhkn
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:

会想到递归,范围由所有元素的集合递减到只有一个元素的集合,每次扩展又是在基础上加新元素

有混入 dp 的想法,但是没有推到出,放弃

不过用二进制位的思想还是可以的

方法一、二进制位

还是以图示为例,数组里每一个元素用一个位表示,整个数组直接对应二进制位,比如:

[3,6,9] 能够产生的子集一共就是 2^3 = 8 ,用二进制表示,如果二进制位=1,表示对应元素被选择

我们通过遍历所有子集,再看子集里面有没有位=1,通过右移操作可以完成所有位的遍历

如果有位=1,那么这个子集包含的元素就能够确定

代码部分,需要额外处理下,因为子集个数不一样,所以二维数组每一维的个数需要额外设定

/*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/
int** subsets(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){int i,j,v;int row = pow(2, numsSize);int col = numsSize;int **sets = (int **)malloc(sizeof(int *) * row);*returnSize = row;*returnColumnSizes =(int *)malloc(sizeof(int) * row); for(int i=0; i<row; i++){sets[i] = (int *)malloc(sizeof(int) * col);(*returnColumnSizes)[i] = col;}for(i=0; i<row; i++){v = i;j = numsSize;sets[i] = (int *)malloc(sizeof(int) * col);(*returnColumnSizes)[i] = 0;memset(sets[i],0,numsSize);int cnt = 0;while(j--){if((v&1) == 1){//printf("i=%d, v=%d, nums[%d]=%d\n", i, v, j, nums[j]);sets[i][cnt++] = nums[j];(*returnColumnSizes)[i]++;}v >>= 1;}}return sets;
}

查看更多刷题笔记

剑指 Offer II 079. 所有子集相关推荐

  1. 一刷77-回溯-78子集(m)(剑指 Offer II 079. 所有子集)

    题目: 给你一个整数数组 nums ,数组中的元素 互不相同 .返回该数组所有可能的子集(幂集). 解集 不能 包含重复的子集.你可以按 任意顺序 返回解集. --------------- 示例: ...

  2. 【算法】剑指 Offer II 079. 所有子集|78. 子集(java / c / c++ / python / go / rust)

    非常感谢你阅读本文~ 欢迎[

  3. 所有子集 剑指 Offer II 079

    我只是喜欢敲代码@_@ 目录 题目描述 AC代码 思路分析 题目描述 给定一个整数数组 nums ,数组中的元素 互不相同 .返回该数组所有可能的子集(幂集). 解集 不能 包含重复的子集.你可以按 ...

  4. 力扣OJ 剑指 Offer II

    目录 剑指 Offer II 001. 整数除法 剑指 Offer II 002. 二进制加法 剑指 Offer II 003. 前 n 个数字二进制中 1 的个数 剑指 Offer II 004. ...

  5. Leetcode刷题笔记——剑指offer II (五)【二分、排序、回溯】

    这里写目录标题 二分查找 剑指 Offer II 069. 山峰数组的顶部 剑指 Offer II 070. 排序数组中只出现一次的数字 剑指 Offer II 071. 按权重生成随机数 剑指 Of ...

  6. leetcode每日一题--前缀树;前缀哈希;深搜;面试题 08.04. 幂集;648. 单词替换面试题 01.09. 字符串轮转;剑指 Offer II 062. 实现前缀树

    leetcode每日一题 ps:今天的每日一题没意思,简单的模拟,自己换一道 面试题 08.04. 幂集 幂集.编写一种方法,返回某集合的所有子集.集合中不包含重复的元素. 说明:解集不能包含重复的子 ...

  7. LeetCode Algorithm 剑指 Offer II 056. 二叉搜索树中两个节点之和

    剑指 Offer II 056. 二叉搜索树中两个节点之和 Ideas 这题有点类似一个组合题,首先是通过二叉树遍历得到一个序列,然后再通过LeetCode Algorithm 1. 两数之和的方法查 ...

  8. 剑指 Offer II 014. 字符串中的变位词

    剑指 Offer II 014. 字符串中的变位词 题目 示例 解答 题目来源为leetcode 题目 给定两个字符串s1和s2,写一个函数来判断s2是否包含s1的某个变位词. 换句话说,第一个字符串 ...

  9. 剑指 Offer II 108. 单词演变

    链接:剑指 Offer II 108. 单词演变 题解: class Solution { public:int ladderLength(string beginWord, string endWo ...

最新文章

  1. python与mysql数据库_python与MySQL数据库
  2. android jar 反射,android 第三方jar库 反射得到自己的资源ID
  3. php7 jpgraph,JpGraph4.0.2中文乱码以及在php7.0版本无法显示的解决办法
  4. java previous,Java的LinkedList的previous下一个
  5. 蓝桥杯 ADV-223 算法提高 8-1因式分解
  6. Nginx之开门见山
  7. 这月绩效差点没了!搞了一个“新人拼团”活动遇到黑产,搭进去了8台服务器......
  8. (转)华兴资本包凡:我们这么屌,是有原因的
  9. Tensorflow serving 学习(一)
  10. 如何快速提升 Flutter App 中的动画性能
  11. bootstrap 轮播插件
  12. C语言零基础入门:孙海洋-C语言程序设计-清华大学出版社
  13. 亚马逊,当之无愧的云计算时代拓荒者
  14. mysql 只显示第一条记录_MySQL:此种查询结果,怎么仅保留第一条记录?
  15. python爬虫爬取王者荣耀官网全部英雄头像(源码分享)
  16. QQ音乐Android客户端Web页面通用性能优化实践
  17. FineReport11-server-目录维护
  18. python中小数_如何在Python中乘以小数
  19. PDF杂谈二 如何实现无纸化办公?
  20. 009仓储物流中心里的人机工程学设计

热门文章

  1. 2022计算机毕业设计选题推荐 - 计算机毕业设计题目大全
  2. org.apache.commons.lang3.StringUtils 的相关用法
  3. 五分钟实现Zabbix电话、短信、邮件、钉钉、飞书、企业微信等机器人报警
  4. imovie for Mac(高级视频剪辑软件)
  5. 【报告分享】2022中国元宇宙白皮书(附下载)
  6. 要闻君说:亚马逊也进击开源了吗?微软收购开源软件公司Citus Data,剑指云服务!投资15亿的数据中心忠德粤桂云来了!...
  7. java相关段子_为什么Java开发人员都带眼镜 | 程序员搞笑段子合集
  8. 经典的搞笑段子,真是笑死人不偿命
  9. SQL Server 相关电子书
  10. MATLAB制作动图并保存