剑指 Offer II 079. 所有子集
地址:
力扣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. 所有子集相关推荐
- 一刷77-回溯-78子集(m)(剑指 Offer II 079. 所有子集)
题目: 给你一个整数数组 nums ,数组中的元素 互不相同 .返回该数组所有可能的子集(幂集). 解集 不能 包含重复的子集.你可以按 任意顺序 返回解集. --------------- 示例: ...
- 【算法】剑指 Offer II 079. 所有子集|78. 子集(java / c / c++ / python / go / rust)
非常感谢你阅读本文~ 欢迎[
- 所有子集 剑指 Offer II 079
我只是喜欢敲代码@_@ 目录 题目描述 AC代码 思路分析 题目描述 给定一个整数数组 nums ,数组中的元素 互不相同 .返回该数组所有可能的子集(幂集). 解集 不能 包含重复的子集.你可以按 ...
- 力扣OJ 剑指 Offer II
目录 剑指 Offer II 001. 整数除法 剑指 Offer II 002. 二进制加法 剑指 Offer II 003. 前 n 个数字二进制中 1 的个数 剑指 Offer II 004. ...
- Leetcode刷题笔记——剑指offer II (五)【二分、排序、回溯】
这里写目录标题 二分查找 剑指 Offer II 069. 山峰数组的顶部 剑指 Offer II 070. 排序数组中只出现一次的数字 剑指 Offer II 071. 按权重生成随机数 剑指 Of ...
- leetcode每日一题--前缀树;前缀哈希;深搜;面试题 08.04. 幂集;648. 单词替换面试题 01.09. 字符串轮转;剑指 Offer II 062. 实现前缀树
leetcode每日一题 ps:今天的每日一题没意思,简单的模拟,自己换一道 面试题 08.04. 幂集 幂集.编写一种方法,返回某集合的所有子集.集合中不包含重复的元素. 说明:解集不能包含重复的子 ...
- LeetCode Algorithm 剑指 Offer II 056. 二叉搜索树中两个节点之和
剑指 Offer II 056. 二叉搜索树中两个节点之和 Ideas 这题有点类似一个组合题,首先是通过二叉树遍历得到一个序列,然后再通过LeetCode Algorithm 1. 两数之和的方法查 ...
- 剑指 Offer II 014. 字符串中的变位词
剑指 Offer II 014. 字符串中的变位词 题目 示例 解答 题目来源为leetcode 题目 给定两个字符串s1和s2,写一个函数来判断s2是否包含s1的某个变位词. 换句话说,第一个字符串 ...
- 剑指 Offer II 108. 单词演变
链接:剑指 Offer II 108. 单词演变 题解: class Solution { public:int ladderLength(string beginWord, string endWo ...
最新文章
- python与mysql数据库_python与MySQL数据库
- android jar 反射,android 第三方jar库 反射得到自己的资源ID
- php7 jpgraph,JpGraph4.0.2中文乱码以及在php7.0版本无法显示的解决办法
- java previous,Java的LinkedList的previous下一个
- 蓝桥杯 ADV-223 算法提高 8-1因式分解
- Nginx之开门见山
- 这月绩效差点没了!搞了一个“新人拼团”活动遇到黑产,搭进去了8台服务器......
- (转)华兴资本包凡:我们这么屌,是有原因的
- Tensorflow serving 学习(一)
- 如何快速提升 Flutter App 中的动画性能
- bootstrap 轮播插件
- C语言零基础入门:孙海洋-C语言程序设计-清华大学出版社
- 亚马逊,当之无愧的云计算时代拓荒者
- mysql 只显示第一条记录_MySQL:此种查询结果,怎么仅保留第一条记录?
- python爬虫爬取王者荣耀官网全部英雄头像(源码分享)
- QQ音乐Android客户端Web页面通用性能优化实践
- FineReport11-server-目录维护
- python中小数_如何在Python中乘以小数
- PDF杂谈二 如何实现无纸化办公?
- 009仓储物流中心里的人机工程学设计
热门文章
- 2022计算机毕业设计选题推荐 - 计算机毕业设计题目大全
- org.apache.commons.lang3.StringUtils 的相关用法
- 五分钟实现Zabbix电话、短信、邮件、钉钉、飞书、企业微信等机器人报警
- imovie for Mac(高级视频剪辑软件)
- 【报告分享】2022中国元宇宙白皮书(附下载)
- 要闻君说:亚马逊也进击开源了吗?微软收购开源软件公司Citus Data,剑指云服务!投资15亿的数据中心忠德粤桂云来了!...
- java相关段子_为什么Java开发人员都带眼镜 | 程序员搞笑段子合集
- 经典的搞笑段子,真是笑死人不偿命
- SQL Server 相关电子书
- MATLAB制作动图并保存