spiralMatrix

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* spiralOrder(int** matrix, int matrixRowSize, int matrixColSize) {
    int* vector = malloc( sizeof(int) * matrixRowSize * matrixColSize );
    int x0 = 0;  // top left x
    int y0 = 0;  // top left y
    int count=0;
    int i=0;

    if( 0 == matrixRowSize  || 0 == matrixColSize ){
        return NULL;
    }
    
    if( 1 == matrixRowSize || 1 == matrixColSize ){
        for(int i=0; i<matrixRowSize; i++){
            for(int j=0; j<matrixColSize; j++){
                vector[count++]=matrix[i][j];
            }
        }
        return vector;
    }
    
    
    // loop
    while(matrixRowSize >=1 && matrixColSize >=1){

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值