菜鸡每日一题系列打卡59天
每天一道算法题目
小伙伴们一起留言打卡
坚持就是胜利,我们一起努力!
题目描述(引自LeetCode)
给定一个正整数n,生成一个包含1到n^2所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:输入: 3输出:[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ]]
题目分析
这道题目和之前螺旋矩阵的题目是完全相同的思路,由变换矩阵顺序到生成矩阵,其实只是将按顺序遍历矩阵并进行存储操作,改为了遍历顺序并进行赋值操作而已。
感兴趣的小伙伴可以移步至文末相关链接查看螺旋矩阵的相关文章。话不多说,上代码!
代码实现
class Solution { public int[][] generateMatrix(int n) { int[][] matrix = new int[n][n]; // 顺时针螺旋顺序边界 int rs = 0, re = n - 1, cs = 0, ce = n - 1; // 当前值 int flag = 1; // 遍历二维数组,每次while循环遍历一层 while (rs <= re && cs <= ce) { // 从左到右 for (int c = cs; c <= ce; c++) matrix[rs][c] = flag++; // 从上到下 for (int r = rs + 1; r <= re; r++) matrix[r][ce] = flag++; if (rs < re && cs < ce) { // 从右到左 for (int c = ce - 1; c > cs; c--) matrix[re][c] = flag++; // 从下到上 for (int r = re; r > rs; r--) matrix[r][cs] = flag++; } // 调整边界 rs++; re--; cs++; ce--; } return matrix; }}
代码分析
对代码进行分析,程序遍历了整个二维数组,因此,时间复杂度为O(n^2),而就空间而言,如果考虑结果存储所需要的空间,则空间复杂度为O(n^2),如果不考虑结果存储所需要的空间,则仅需要常数级别的额外空间,因此,空间复杂度为O(1)。
执行结果
相关链接
每日一题——螺旋矩阵
学习 | 工作 | 分享
?长按关注“有理想的菜鸡”
只有你想不到,没有你学不到![96a79416bfbc7d280793339a74f2e622.gif](https://img-blog.csdnimg.cn/img_convert/96a79416bfbc7d280793339a74f2e622.gif)