LeetCode 59. 螺旋矩阵 II

题目:

https://leetcode-cn.com/problems/spiral-matrix-ii/

 

题解:

这道题没有什么算法可言,分析整个过程,模拟即可。

LeetCode 59. 螺旋矩阵 II

我们用 i 表示横坐标,j 表示纵坐标,模拟上面过程:

1. 填充上行,从左到右,(i, j++)。

2. 填充右列,从上到下,(i++, j)。

3.填充下行,从右到左,(i, j--)。

4.填充左列,从下到上,(i--, j)。

注意:

1. 边界问题,步骤1结束后,需要转变填充方向,此时应该从4的位置开始填充(因为3已经填充过了)。

2.没有填充的位置一定是0,如果遍历到不为0的区域证明当前位置已经被填充,此时需要改变填充方向。

 

    public int[][] generateMatrix(int n) {
        int count = 1;
        int i = 0;
        int j = 0;
        int[][] result = new int[n][n];
        while (count <= n * n) {
            // 向右
            while (j < n && result[i][j] == 0) {
                result[i][j] = count++;
                j++;
            }

            i++;
            j--;
            // 向下
            while (i < n && result[i][j] == 0) {
                result[i][j] = count++;
                i++;
            }

            j--;
            i--;
            // 向左
            while (j >= 0 && result[i][j] == 0) {
                result[i][j] = count++;
                j--;
            }

            i--;
            j++;
            // 向上
            while (i >= 0 && result[i][j] == 0) {
                result[i][j] = count++;
                i--;
            }

            j++;
            i++;
        }


        return result;
    }

 

上一篇:MySQL 数据类型


下一篇:Leetcode 59. 螺旋矩阵 II