题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
1 2 3 4 5 6
   | 输入:matrix = [   [1,2,3],   [4,5,6],   [7,8,9] ] 输出:[1,2,3,6,9,8,7,4,5]
   | 
 
 解决思路
题目要求顺时针打印,可以采用定义右(right),下(down),左(left),上(up) 四个方向,和分别对应的四个边界,每次触碰到边界的时候,就需要转方向了。
需要注意的是,当我们触碰到右边界时,需要改变的是上边界,此时上边界应该加一,右边界不变,因为 触碰到右边界说明上边界已经走完了。同理
触碰到下边界时候,右边界减一,触碰到左边界时候下边界减一,触碰到上边界时候左边界加一,依次类推。
 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
   | 
 
 
  var spiralOrder = function (matrix) {   if (matrix.length == 1) return matrix[0];   if(matrix.length == 0) return matrix;   let dir = [[0, 1], [1, 0], [0, -1], [-1, 0]]    let up = 0    let right = matrix[0].length - 1    let down = matrix.length - 1    let left = 0    let times = 0    let res = []   let resLength = matrix[0].length * matrix.length    let i = 0    let j = 0    while (res.length != resLength) {               if(j > right){       j--       up++       times++       i=i+dir[times % dir.length][0]       j=j+dir[times % dir.length][1]     }          if(i>down){       i--       right--       times++       i=i+dir[times % dir.length][0]       j=j+dir[times % dir.length][1]     }          if(j<left){       j++       down--       times++       i=i+dir[times % dir.length][0]       j=j+dir[times % dir.length][1]     }          if(i<up){       i++       left++       times++       i=i+dir[times % dir.length][0]       j=j+dir[times % dir.length][1]     }     res.push(matrix[i][j])     i=i+dir[times % dir.length][0]     j=j+dir[times % dir.length][1]   }   return res };
 
  |