求整数数组的子集【C语言】

方法1:通过二进制位,因为n个整数数组的子集有2的n次方个,例如整数数组为{1,2,3},子集有2的3次方,8个;

期望的输出形式

其中需要了解关注的是

n&1判断最低位是否有数。如果一个子集为{2},利用二进制位2&1让其最低位空出来,依次类推。

n>>1结果是n/2

将n&1与n>>1结合就可以得到

若n=3(011); n&1=1 其最低位可以得到,n>>1 = 1;其次低位可以低到,

可以通过下面代码解读

#include <stdio.h>
​
int main(int argc, char const *argv[])
{
    int n=3;
    int str1[3]={1,2,3}; // 定义一个数组
    int str2[3]={0};
    for (int i = 2; i >= 0; i--)
    {
        if(n&1)    // i=2 n=3 n&1=1 ; i=1 n=1 n&1=1 ; i=0 n=0 n&1=0
        {
            str2[i]=str1[i];// str2[2]=str1[2] ;str2[1]=str1[1] ; 
        }
        n >>= 1; // n=1 n=0
    }
    for (int i = 0; i < 3; i++)
    {
        printf("%d ",str2[i]); // str2[2]=str1[2] ;str2[1]=str1[1] ; str[0]未被赋值
    }
    
    return 0;
}
​

此时得到了

以上述思想求整数数组的子集

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
​
int main(int argc, char const *argv[])
{
    int nums[3] = {1,2,3};
    int numsSize = 3;
    int num = pow(2,numsSize);
    int **returnColumnSizes;
    returnColumnSizes = (int**)malloc(sizeof(int*)*num);
    for(int i = 0; i < num; i++)  
    {
        returnColumnSizes[i] = (int*)malloc(sizeof(int)*numsSize);
    } 
    for(int i = 0; i < num; i++)
    {
        for(int j = 0;j < numsSize; j++)
        {
            returnColumnSizes[i][j] = 0;
            
        }
        
    }   
    for(int i = 0; i < num; i++)
    {
        for(int j = 0; j < numsSize; j++)
        {
            returnColumnSizes[i][j]=0;
            printf("%d ",returnColumnSizes[i][j]);
        }
        printf("\n");
    }
    printf("---------\n");
    for(int i = 0; i < num; i++)
    {
        
        int n=i;
        int k=0;
        while (n)
        {
            if(n&1)
            {
                returnColumnSizes[i][k]=nums[k];
            }
            n >>= 1;
            
            k++;
        }
        
        
    }
    printf("---------\n");
    
    for(int i = 0; i < num; i++)
    {
       
        for(int j = 0; j < numsSize; j++)
        {
            if(returnColumnSizes[i][j]==0)
            {
                continue;
            }
            printf("%d ",returnColumnSizes[i][j]);
             
        }
       
        printf("\n");
    }
   
}
​

本题本来打算写来回答力扣题78题求子集的,但是,才疏学浅,还是我不配。

最终结果将所有0都去掉了。

相关推荐

  1. C语言实现1000以内全部亲密

    2024-07-15 05:48:03       59 阅读
  2. C语言数组中最大

    2024-07-15 05:48:03       44 阅读
  3. c语言100到999水仙花

    2024-07-15 05:48:03       26 阅读
  4. C语言初始化

    2024-07-15 05:48:03       62 阅读
  5. C语言三维创建

    2024-07-15 05:48:03       87 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 05:48:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 05:48:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 05:48:03       58 阅读
  4. Python语言-面向对象

    2024-07-15 05:48:03       69 阅读

热门阅读

  1. vue 中时间日期格式处理

    2024-07-15 05:48:03       18 阅读
  2. leetcode239.滑动窗口最大值

    2024-07-15 05:48:03       13 阅读
  3. SQL基础 | NOT NULL 约束介绍

    2024-07-15 05:48:03       22 阅读
  4. 算法金 | 深度学习图像增强方法总结

    2024-07-15 05:48:03       17 阅读
  5. rabbitmq解除消息者消息推送限制

    2024-07-15 05:48:03       23 阅读
  6. 迪米特法则

    2024-07-15 05:48:03       25 阅读