其他分享
首页 > 其他分享> > LeetCode78/90 子集

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