LeetCode78/90 子集
作者:互联网
原题目
第一题
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/subsets
第二题
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: [1,2,2]
输出:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/subsets-ii
题目分析
第一题
利用组合的dfs代码,每遍历到某一层就存储到返回数组
第二题
去重,老方法
完整代码
第一题
int resSize;
void dfs(int *nums,int numsSize,int **returnColumnSizes,int *s,int s_index,int **res,int temp)
{
res[resSize]=(int *)malloc(sizeof(int)*s_index);
(*returnColumnSizes)[resSize]=s_index;
for(int i=0;i<s_index;i++)
{
res[resSize][i]=s[i];
}
resSize++;
for(int i=temp;i<numsSize;i++)
{
s[s_index]=nums[i];
dfs(nums,numsSize,returnColumnSizes,s,s_index+1,res,i+1);
}
}
int** subsets(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){
*returnSize=pow(2,numsSize);
resSize=0;
int **res=(int **)malloc(sizeof(int *)*(*returnSize));
*returnColumnSizes=(int *)malloc(sizeof(int)*(*returnSize));
int *s=malloc(sizeof(int)*numsSize);
dfs(nums,numsSize,returnColumnSizes,s,0,res,0);
return res;
}
第二题
int resSize;
int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
void dfs(int *nums,int numsSize,int **returnColumnSizes,int *s,int s_index,int **res,int temp)
{
res[resSize]=(int *)malloc(sizeof(int)*s_index);
(*returnColumnSizes)[resSize]=s_index;
for(int i=0;i<s_index;i++)
{
res[resSize][i]=s[i];
}
resSize++;
int flag=-1;
for(int i=temp;i<numsSize;i++)
{
if(flag!=-1&&nums[flag]==nums[i])continue;
s[s_index]=nums[i];
dfs(nums,numsSize,returnColumnSizes,s,s_index+1,res,i+1);
flag=i;
}
}
int** subsetsWithDup(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){
qsort(nums,numsSize,sizeof(int),cmp);
int **res=(int **)malloc(sizeof(int *)*pow(2,numsSize));
*returnColumnSizes=(int *)malloc(sizeof(int)*pow(2,numsSize));
resSize=0;
int *s=(int *)malloc(sizeof(int)*numsSize);
dfs(nums,numsSize,returnColumnSizes,s,0,res,0);
*returnSize=resSize;
return res;
}
标签:index,nums,int,res,LeetCode78,resSize,子集,90 来源: https://blog.csdn.net/weixin_44529350/article/details/100063800