老青菜

剑指offer-顺时针打印矩阵

2017-01-27

题目

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

分析

例如,有以下矩阵:

    1        2        3        4
    5        6        7        8
    9        10       11       12

顺时针,从外向内打印元素,最后输出:1,2,3,4,8,12,11,10,9,5,6,7。
这个并没有涉及到什么算法,只需要理清思路即可,整个输出分解成以下两块:

  1. 一圈一圈的输出元素。
  2. 每一圈分解成四块输出(top、right、bottom、left)。

实现

void printMatrix(int (*matrix)[4], int rows, int columns) {
    if (matrix == NULL || columns<=0 || rows<=0) {
        return;
    }
    int loop = 0;//需要走的圈数量
    while (2*loop<columns && 2*loop<rows) {
        //输出 top
        int *topRow = matrix[loop];
        printf("top:");
        for (int i=loop; i<columns-loop; i++) {
            printf("%d,",topRow[i]);
        }
        //输出 right,不包含顶边和底部的元素
        printf("right:");
        for (int i=loop+1; i<rows-loop-1; i++) {
            printf("%d,",matrix[i][columns-1-loop]);
        }
        //输出 bottom
        printf("bottom:");
        int *bottomRow = matrix[rows-1-loop];
        for (int i=columns-1-loop-1; i>loop; i--) {
            printf("%d,",bottomRow[i]);
        }
        //输出 left,不包含顶边和底部的元素
        printf("left:");
        for (int i=rows-1-loop-1; i>loop; i--) {
            printf("%d,",matrix[i][loop]);
        }
        loop++;
        printf("\r\n");
    }
}

添加测试代码:

int matrix[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
printMatrix(matrix, 3, 4);

最后输出:

top:1,2,3,4,right:8,bottom:11,10,left:5,
top:6,7,right:bottom:left:
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章