题目:顺时针打印矩阵
该题在一次腾讯笔试中遇到过,当时没写完整,特别记录下。
思路:
1、矩阵是一个二维数组,如下图所示(手写图见谅):
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
}