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

顺时针打印矩阵

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

int* printMatrix(int** matrix, int matrixRowLen, int* matrixColLen,
                 int* returnSize ) {
    int top = 0,botton = matrixRowLen - 1; 
  	int left = 0, right = *matrixColLen - 1;
  	int i,index = 0;
    *returnSize = matrixRowLen *(*matrixColLen); //传过来的行和列相乘,为之后判断做准备
    int* s = (int*)malloc(sizeof(int) * (*returnSize) ); //开辟一个新的数组来存储要打印的数
    if (*returnSize == 0) return NULL;
  
    while (1) {
        for (i = left; i <= right; i++) { //往右走
            s[index++] = matrix[top][i];
        }
        top++; //每次走到边界,要让他加加,下次就从加后的位置进行循环
        if (top > botton)
            break; //判断一下是否超过边界,如果超过就跳出,就说明全部已经历遍完成

	  
        for (i = top; i <= botton; i++) { //往下走
            s[index++] = matrix[i][right];
        }
        right--; //每次走到边界,要让他减减,下次就从减后的位置进行循环
        if (right < left) break;

	  
        for (i = right; i >= left; i--) { //往左走
            s[index++] = matrix[botton][i];
        }
        botton--; //每次走到边界,要让他减减,下次就从减后的位置进行循环
        if (botton < top) break;

	  
        for (i = botton; i >= top; i--) { //往上走
            s[index++] = matrix[i][left];
        }
        left ++; //每次走到边界,要让他加加,下次就从加后的位置进行循环
        if (right < left) break;
    }

    return s;
}

关键是用四个变量定位好边界点,同时利用边界点作为限制条件,而不用原始的数组长宽。同时遍历某行某列只用一个变量,可以使得代码简单易懂

全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

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