题解 | #顺时针打印矩阵#
顺时针打印矩阵
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;
}
关键是用四个变量定位好边界点,同时利用边界点作为限制条件,而不用原始的数组长宽。同时遍历某行某列只用一个变量,可以使得代码简单易懂
查看16道真题和解析