顺时针打印矩阵,经典常见算法题

工作学习之余,没事会写写力扣里的算法题目~这个算法题目比较经典,推荐座位算法什么的应该会用到,题目是在这里插入图片描述
给大家推荐一下自己的思路~循环push数组,然后判断边界和圈数。代码为

       var spiralOrder = function (matrix) {
        if (matrix.length === 0) return [];
        if (matrix.length === 1) return matrix[0];
        let arr = [];
        let x = matrix[0].length; //横长
        let y = matrix.length; //长
        let length = x * y; // 总数
        let i = 0; //横的
        let j = 0; // 树的
        let n = 0; //记录多少圈
        let r = "r";//记录方向
        for (let a = 0; a < length; a++) {
          arr.push(matrix[i][j]);
          //判断边界
          if ( r === "r" && j === x - n - 1 && i !== y - n - 1) {
            //  console.log(i,j)
            r = "d";
          } else if ( r === "d" && j === x - n - 1 && i === y - n - 1) {
            // console.log(i,j)
            r = "l";
          } else if (r === "l" && j === n && i === y - n - 1) {
            // console.log(matrix[i][j])
            r = "u";
          }
          // 判断4个方向
          if (r == "r") {
            j++;
          } else if (r == "d") {
            i++;
          } else if (r == "l") {
            j--;
          } else if (r == "u") {
            if (i == n + 1) {   //r 第二圈开始,跳到r就可以
              n++;
              r = "r";
              j++;
            } else {
              i--;
            }
          }
        }
         return arr;
      };

其中一种解法–

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值