leetcode算法练习【59】螺旋矩阵II

所有题目源代码:Git地址

题目

给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

示例:

输入: 3
输出:
[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]
]

方案

class Solution {
        public int[][] generateMatrix(int n) {

            int[][] matrix = new int[n][n];
            int tmp = 1;
            int rowstart = 0;
            int culstart = 0;
            int rowend = n - 1;
            int culend = n - 1;
            while (culstart < culend && rowstart < rowend) {
                //→
                for (int i = culstart; i <= culend; i++) {
                    matrix[rowstart][i] = tmp++;

                }
                rowstart++;
                //↓
                for (int j = rowstart; j <= rowend; j++) {
                    matrix[j][culend] = tmp++;
                }
                culend--;
                //←
                for (int i = culend; i >= culstart; i--) {
                    matrix[rowend][i] = tmp++;
                }
                rowend--;
                //↑
                for (int j = rowend; j >= rowstart; j--) {
                    matrix[j][culstart] = tmp++;
                }
                culstart++;
            }
            if (n*n+1>tmp)
            	matrix[rowstart][culstart]=tmp++;
            return matrix;
        }
    }

复杂度计算

  • 时间复杂度:O(n2)
  • 空间复杂度:O(1)
原创文章 179 获赞 270 访问量 34万+

猜你喜欢

转载自blog.csdn.net/symuamua/article/details/106165548