题目:
给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]
思路:
先实现方向控制,得到1->2->3->6->9->8->7->4->1,在此基础上加上一个变量cycle记录转了几圈,边界判断时加上这个变量就OK了
代码:
/*** @param {number[][]} matrix* @return {number[]}*/
var spiralOrder = function (matrix) {let x = 0, y = 0 // 当前坐标let way = 'right' // 当前走的方向let num = matrix.length * matrix[0].length // 要遍历的元素总数量let cycle = 0 // 已经转了几圈let res = [] // 输出结果for (let i = 0; i < num; i++) {res.push(matrix[y][x])if (way === 'right') {if (x + 1 < (matrix[0].length - cycle)) { // 下一步还能往右x++} else { // 下一步不能往右,那就往下way = 'down'}}if (way === 'down') {if (y + 1 < (matrix.length - cycle)) { // 下一步还能往下y++} else { // 下一步不能往下,那就往左way = 'left'}}if (way === 'left') {if (x - 1 >= (0 + cycle)) { // 下一步还能往左x--} else { // 下一步不能往左,那就往上way = 'up'cycle++ // 圈数加一}}if (way === 'up') {if (y - 1 >= (0 + cycle)) { // 下一步还能往上y--} else { // 下一步不能往上,那就往右way = 'right'x++}}}return res
};