llllmz

导航

59. 螺旋矩阵 IIC

/**
 * 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().
 */
void install(int** a,int* x,int n,int now){
    int i=now;//当前行
    int j=now;//当前列
    for(;j<n;j++){//向右
        if(a[i][j]==0){
            a[i][j]=(*x)++;
        }else{
            break;
        }
    }
    i++;
    j--;
    if(j<0) return;
    for(;i<n;i++){//向下
        if(a[i][j]==0){
            a[i][j]=(*x)++;
        }else{
            break;
        }
    }
    i--;
    j--;
    if(i<0) return;
    for(;j>=0;j--){//向左
        if(a[i][j]==0){
            a[i][j]=(*x)++;
        }else{
            break;
        }
    }
    j++;
    i--;
    if(j>=n) return;
    for(;i>=0;i--){//向上   
        if(a[i][j]==0){
            a[i][j]=(*x)++;
        }else{
            break;
        }
    }
}

int** generateMatrix(int n, int* returnSize, int** returnColumnSizes) {
    *returnSize=n;
    int* columnsizes=(int*)malloc(sizeof(int)*n);
    for(int i=0;i<n;i++){
        columnsizes[i]=n;
    }
    *returnColumnSizes=columnsizes;
    int** a=(int**)malloc(sizeof(int*)*n);
    for(int i=0;i<n;i++) a[i]=(int*)malloc(sizeof(int)*n);
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            a[i][j]=0;
        }
    }
    int x=1;
    for(int i=0;i<n;i++){
        if(a[i][i]==0){
            install(a,&x,n,i);
        }
    }
    return a;
}

結果:

posted on 2024-02-28 13:30  神奇的萝卜丝  阅读(8)  评论(0)    收藏  举报