spiralMatrixII

/**
 * Return an array of arrays.
 * Note: The returned array must be malloced, assume caller calls free().
 */
int** generateMatrix(int n) {
    
    int x0 = 0;  // top left x
    int y0 = 0;  // top left y
    int count = 0;
    int i = 0;
    
    int *vector = (int*)malloc(sizeof(int) * n * n);
    for(i=0; i<n*n; i++){
        vector[i] = i + 1;
    }
    int **matrix = (int**) malloc(sizeof(int*) * n);
    for(i=0; i<n; i++){
        matrix[i] = (int*)malloc(sizeof(int) * n);
    }
   

    if( 0 == n ){
        return NULL;
    }
    
    if( 1 == n ){
        matrix[0][0] = 1;
        return matrix;
    }
    
    
    // loop
    while( n >= 1){

        int x1 = x0 + n - 1;  // bottom right x 
        int y1 = y0 + n - 1;  // bottom right y
        
        // first row
        for(i=y0; i<=y1; i++){
            matrix[x0][i] = vector[count++];
        }
        
        // last col
        for(i=x0+1; i<=x1; i++){
            matrix[i][y1] = vector[count++]; 
        }
        
        
        // last row
        if(n > 1){      // matrix need to be at least two rows 
            for(i=y1-1; i>=y0; i--){
                matrix[x1][i] = vector[count++];
            }
        }
        // first col
        if(n > 1){     // matrix need to be at least two cols
            for(i=x1-1; i>=x0+1; i--){
                matrix[i][y0] = vector[count++] ;
            }
        }
        x0++;
        y0++;
        n-=2;
        
    }
    return matrix;        
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值