题解 | #顺时针打印矩阵#

顺时针打印矩阵

https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param matrix int整型二维数组 
 * @param matrixRowLen int matrix数组行数
 * @param matrixColLen int* matrix数组列数
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 */
#include <stdlib.h>
enum{
    right,
    left,
    up,
    down,
}Direction;
int* printMatrix(int** matrix, int matrixRowLen, int* matrixColLen, int* returnSize ) {
    // write code here
    int i=0, j=0;                                   //矩阵索引
    int lMargin=0, rMargin=0, uMargin=0, dMargin=0; //边界
    int *ret;
    Direction = right;                              //遍历方向
    *returnSize = matrixRowLen*matrixColLen[0];     //返回值的数量,即矩阵元素的个数
    ret = (int*)malloc(sizeof(int)*(*returnSize));  //给打印数组申请空间
    for(int n=0; n<matrixRowLen*matrixColLen[0]; n++){
        
        ret[n] = matrix[i][j];
        
        switch (Direction) {
            case right:{
                if(j+rMargin+1 < matrixColLen[0]){ //如果下一位没超过该行,则i++
                    j++;
                }else{  //该行遍历完成,换方向
                    Direction = down;
                    rMargin++;
                    i++;    //向下移动一位
                }
                break;
            }
            case down:{
                if(i+dMargin+1 < matrixRowLen){
                    i++;
                }else{
                    Direction = left;
                    dMargin++;
                    j--;
                }
                break;
            }
            case left:{
                if(j-lMargin-1 >= 0){
                    j--;
                }else{
                    Direction = up;
                    lMargin++;
                    i--;
                }
                break;
            }
            case up:{
                if(i-uMargin-1 > 0){
                    i--;
                }else{
                    Direction = right;
                    uMargin++;
                    j++;
                }
                break;
            }
        }
    }
    return ret;
}

全部评论

相关推荐

迷茫的大四🐶:自信一点,我认为你可以拿到50k,低于50k完全配不上你的能力,兄弟,不要被他们骗了,你可以的
点赞 评论 收藏
分享
04-12 13:42
江南大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务