78. Subconjunto: uso inteligente del método de disposición binaria

78. Subconjunto: uso inteligente del método de disposición binaria

Se le proporciona una matriz de números enteros. Los elementos de la matriz son diferentes entre sí. Devuelve todos los subconjuntos posibles (conjuntos de potencias) de esta matriz.

El conjunto de solución no puede contener subconjuntos duplicados. Puede devolver los conjuntos de soluciones en cualquier orden.

Ejemplo 1:

Entrada: números = [1,2,3]
Salida: [[],[1],[2],[1,2],[3],[1,3],[2,3],[1, 2,3]]

Ejemplo 2:

Entrada: números = [0]
Salida: [[],[0]]

El blogger cree que vale la pena aprender esta pregunta, porque esta pregunta puede enseñarnos cómo crear un subconjunto de un conjunto. Un excelente método aquí es que la disposición binaria 01 de cada número es diferente. De esta manera, podemos enumerar todos los clasificaciones de un conjunto. Por ejemplo, si un conjunto tiene un tamaño de 3 y el número de sus subconjuntos es 8, entonces habrá ocho tipos de 01 binario para los siete números 0-7, y luego, corresponderá a 1 Extraer datos de la ubicación puede resolver muy bien el problema.
El código de la solución es el siguiente:

/**
 * 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 len=1;
    
    for(int i=0;i<numsSize;i++){
    
    
        len=len*2;
    }
    int **re=(int **)malloc(sizeof(int*)*len);
    (* returnColumnSizes)=(int *)malloc(sizeof(int)*len);
    * returnSize=len;
    for(int i=0;i<len;i++){
    
    
        (* returnColumnSizes)[i]=0;
        re[i]=(int*)malloc(sizeof(int)*numsSize);
    }
    int psize=0;
    for(int i=0;i<len;i++){
    
    
        int size=0;
        int num=i;
        
        for(int j=0;num>0;j++){
    
    
            if(num&1){
    
    
               printf(" %d %d %d|",psize,size,j);
                re[psize][size++]=nums[j];
               
            }
         
            num=num>>1;

        }
        (* returnColumnSizes)[psize]=size;
        psize++;
    }
    return re;

}

Este es un gran tema y recomiendo a todos que lo estudien.

Supongo que te gusta

Origin blog.csdn.net/weixin_43327597/article/details/133161845
Recomendado
Clasificación