LeetCode | Subsets(子集)
来源:互联网 发布:麻将游戏app开发 源码 编辑:程序博客网 时间:2024/05/09 06:10
Given a set of distinct integers, S, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
- The solution set must not contain duplicate subsets.
For example,
If S = [1,2,3]
, a solution is:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]
题目解析:
方案一:笨蛋方法
这题和上一题有些类似。不过这里没有限制个数,输出所有的情况。每个数据都可选可不选,有2^n种情况。采用的递归方式和上题一样,不过当数据begin==n的时候,要额外进行输出。不然栈里面有数据,但是得不到显示。
代码:
#include <stdio.h>#include <stdlib.h>typedef struct{ int *buf; int len;}Stack;void subsets(int arr[],int n,int begin,Stack *S){ if(begin > n){ //这里可以写成begin>=n,但子函数最后的输出要写进去, return ; //换成begin>n 后,让后面的输出处理begin==n的情况 } for(int i = begin;i < n;i++){ S->buf[S->len++] = arr[i]; //选择 subsets(arr,n,i+1,S); S->len--; //不选择,下次循环进行递归 } //当i==n的时候,已经退出了循环,但是数组中还有数据,就要进行输出 if(S->len == 0){ printf("$\n"); return ; } for(int i = 0;i < S->len;i++) printf("%d ",S->buf[i]); printf("\n"); return ;}int main(){ int arr[] = {1,2,3,4}; int n = sizeof(arr)/sizeof(int); Stack S; S.buf = (int *)malloc(n * sizeof(int)); S.len = 0; subsets(arr,n,0,&S); free(S.buf); return 0;}
方案二:
真是笨啊!递归怎么都没学好,网上看了相关代码后,才知道是不用额外的循环的。这层循环选还是不选,直接递归到深层次。可能受到DFS的影响,递归要放在循环当中。要及时改正。
void subsets(int arr[],int n,int begin,Stack *S){ if(begin >= n){ //这里可以写成begin>=n,但子函数最后的输出要写进去, if(S->len == 0){ printf("$\n"); return ; } for(int i = 0;i < S->len;i++) printf("%d ",S->buf[i]); printf("\n"); return ; //换成begin>n 后,让后面的输出处理begin==n的情况 } subsets(arr,n,begin+1,S); S->buf[S->len++] = arr[begin]; subsets(arr,n,begin+1,S); S->len--; //要减一}
0 0
- LeetCode | Subsets(子集)
- LeetCode 78. Subsets(子集)
- LeetCode OJ 之 Subsets (子集合)
- LeetCode 90. Subsets II(子集)
- Subsets 子集合问题(leetcode)
- Leetcode 78 Subsets(打印全部子集)
- LeetCode--Subsets(集合的子集)Python
- Subsets 求子集 @LeetCode
- [LeetCode] Subsets II 子集
- LeetCode-Subsets(子集)
- Leetcode 78 Subsets + 90 Subsets II 子集
- LeetCode OJ 之 Subsets II (子集合-二)
- 【LeetCode-面试算法经典-Java实现】【078-Subsets(子集)】
- leetcode 78. Subsets(DFS找集合的全部子集)
- Leetcode 90 Subsets II (打印不重复的子集)
- leetcode-78. Subsets(非重复元素子集合)
- leetcode解题之 77. Combinations&78. Subsets&90. Subsets II java 版(求所有子集)
- Subsets(集合的子集)
- 关于新APP,从交底书入手
- mysql乐观锁简介
- ios网络编程(http、socket)
- C语言基础4
- 苹果开发/IOS开发资源推荐
- LeetCode | Subsets(子集)
- partial修饰符修饰的类叫部分类
- 对java synchronized 关键字的理解二
- debian下各种垃圾问题
- 形成自己的学习方法
- 2014年新sdk更新,引发的旧eclipse无法使用的问题
- USB驱动相关知识
- 关于同步、异步、阻塞与非阻塞的知识点
- POJ3122 - Sum of Different Primes - 动态规划