输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
1. 用行增量和列增量决定下一步方向
2. 到达边界时,换方向;同时缩小边界条件;
3. 当左右边界,上下边界重合时了,完成全部遍历;
/**
* @param {number[][]} matrix
* @return {number[]}
*/
var spiralOrder = function(matrix) {
if(matrix.length ===0) return []
let i=0;
let j=0;
let rowStart =0;
let colStart =0;
let rowlen = matrix.length;
let collen = matrix[0].length
let result = [];
let rowIncrease =0;
let colIncrease =1;
while(rowlen > rowStart && collen > colStart){
result.push(matrix[i][j]);
if(colIncrease === 1 && j === collen-1){ // 到达右上角,往下走
rowIncrease =1;
colIncrease =0;
rowStart++;
}else if( colIncrease === -1 && j=== colStart){ // 到达左下角,往上走
rowIncrease = -1;
colIncrease =0;
rowlen--;
}else if( rowIncrease ===1 && i === rowlen-1){ // 到达右下角,往左走
colIncrease = -1;
rowIncrease =0;
collen--;
}else if(rowIncrease === -1 && i=== rowStart){ // 到达左上角,往右走
colIncrease = 1;
rowIncrease =0;
colStart++;
}
i = i + rowIncrease;
j= j + colIncrease;
}
return result;
};