螺旋矩阵(来源:力扣数组59)

题目

分析

本题考虑的问题主要是边界的处理问题,即处于其中的四个角落处,很多同学在编写的时候没有注意这里的边界问题,在处理第一行的时候可能是包含了左边界的元素,没有包含右边界的元素。而在处理3到5的时候则是既包含了上边界3又包含了下边界5,这样就造成了错误。因此在编写的时候我们始终要坚持一种处理的方式进行处理,不要在编写的时候改变处理方式。就好比处理区间的问题时,我们如果确定是左闭右开的区间,就要坚持这样,不要一会儿左闭右开,一会儿左闭右闭。

代码(JAVA版)

class Solution {
    public int[][] generateMatrix(int n) {
      int startx=0,starty=0,offset=1,i=0,j=0,count=1,loop=0;
      int nums[][]=new int[n][n];
      while(loop++<(n/2))
      {
      for(j=starty;j<n-offset;j++)
      {
          nums[startx][j]=count++;
      }
      for(i=startx;i<n-offset;i++)
      {
          nums[i][j]=count++;
      }
      for(;j>starty;j--)
      {
         nums[i][j]=count++;
      }
      for(;i>startx;i--)
      {
         nums[i][j]=count++;
      }
      startx++;
      starty++;
      offset++;
      }
      if(n%2==1)
      {
          nums[n/2][n/2]=count++;
      }
      return nums;
     
    }
}

官方代码(JAVA版)

class Solution {
    public int[][] generateMatrix(int n) {
        int maxNum = n * n;
        int curNum = 1;
        int[][] matrix = new int[n][n];
        int row = 0, column = 0;
        int[][] directions = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; // 右下左上
        int directionIndex = 0;
        while (curNum <= maxNum) {
            matrix[row][column] = curNum;
            curNum++;
            int nextRow = row + directions[directionIndex][0], nextColumn = column + directions[directionIndex][1];
            if (nextRow < 0 || nextRow >= n || nextColumn < 0 || nextColumn >= n || matrix[nextRow][nextColumn] != 0) {
                directionIndex = (directionIndex + 1) % 4; // 顺时针旋转至下一个方向
            }
            row = row + directions[directionIndex][0];
            column = column + directions[directionIndex][1];
        }
        return matrix;
    }
}

结果展示

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值