算法刷题:顺时针打印矩阵

799 阅读1分钟
题目:顺时针打印矩阵

该题在一次腾讯笔试中遇到过,当时没写完整,特别记录下。

思路:

1、矩阵是一个二维数组,如下图所示(手写图见谅):

WechatIMG606.jpeg

2、要完成顺时针打印,上-右-下-左,呈环形打印:

  • 上边界top:0
  • 右边界right:matrix[0].length-1
  • 下边界bottom:matrix.length-1
  • 左边界left:0

3、循环结束条件,当最终打印的数组res等于矩阵的元素个数的时候,循环结束

  • 矩阵元素个数size = matrix.length * matrix[0].length;
题解代码:
const spiralOrder = (matrix)=>{
    if(matrix.length === 0) return [];
    let res = [];
    const size = matrix.length * matrix[0].length;
    let top = 0;
    let bottom = matrix.length-1;
    let left = 0;
    let right = matrix[0].length-1;
    // 循环判断条件
    while(res.length !== size){
        // 打印上
        for(let i=left;i<=right;i++){
            res.push(matrix[top][i])
        }
        top++;
        // 打印右
        for(let i=top;i<=bottom;i++){
            res.push(matrix[i][right])
        }
        right--;
        //循环结束
        if(res.length === size) break;
        // 打印下
        for(let i=right;i>=left;i--){
            res.push(matrix[bottom][i])
        }
        bottom--;
        // 打印左
        for(let i=bottom;i>=top;i--){
            res.push(matrix[i][left])
        }
        left++;
    }
    return res
}