【剑指offer】19:顺时针打印矩阵

题目描述:

 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。

解题思路:

此题目为循环打印矩阵,而对于每一圈的打印,很自然便可以想到遵循从左到右,从上到下,从右到左,从下到上的顺序。但是这里需要注意的是最后一圈的打印,由于矩阵并不一定是方阵,最后一圈有可能退化为只有一行,只有一列,甚至只有一个数,因此要注意进行判断,避免重复打印。(如图)

 

代码实现

(JavaScript实现):

function printMatrix(matrix)
{
    // write code here
    if (matrix == 0 || matrix.length == 0) {
        return matrix;
    }
    var res = [];
    var top = 0, left = 0,
        bottom = matrix.length - 1,
        right = matrix[0].length - 1;
    while (top <= bottom && left <= right) {  //循环一圈
        //从左上到右上
        for (let i = left; i <= right; i++) {
            res.push(matrix[top][i]);
        }
        //从右上到右下
        for (let i = top + 1; i <= bottom; i++){
            res.push(matrix[i][right]);
        }
        //从右下到左下
        if (bottom !== top) {
            for (let i = right - 1; i >= left; i--) {
                res.push(matrix[bottom][i]);
            }
        }
        //从左下到左上
        if (left !== right) {
            for (let i = bottom - 1; i >= top + 1; i--) {
                res.push(matrix[i][left]);
            }
        }
        top++;
        left++;
        bottom--;
        right--;
    }
    return res;
}

 

posted @ 2021-04-19 21:19  zhang十六  阅读(53)  评论(0编辑  收藏  举报