Leetcode - Spiral Matrix II

本文介绍了一种生成指定大小的螺旋矩阵的高效算法,并通过示例代码展示其实现过程,旨在提供一种简洁且易于理解的方法来填充矩阵元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

For example,
Given n = 3,

You should return the following matrix:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]

[分析]
实现2参考[url]https://leetcode.com/discuss/14079/my-super-simple-solution-can-used-for-both-spiral-matrix-and[/url],代码更简洁。


public class Solution {
// Method 1
public int[][] generateMatrix1(int n) {
if (n < 0) return null;
int[][] board = new int[n][n];
int rowStart = 0, colStart = 0;
int radius = n;
int num = 1;
while (radius > 0) {
int i = rowStart, j = colStart;
// move right
int upRight = colStart + radius;
while (j < upRight) {
board[i][j++] = num++;
}
j--;
if (radius == 1) break;
// move down
i++;
int downRight = rowStart + radius;
while (i < downRight) {
board[i++][j] = num++;
}
i--;
// move left
j--;
while (j >= colStart) {
board[i][j--] = num;
num++;
}
j++;
// move up
--i;
while (i > rowStart) {
board[i--][j] = num;
num++;
}
// update info to start next spiral
rowStart++; colStart++;
radius -= 2;
}
return board;
}
// Method 2
public int[][] generateMatrix(int n) {
if (n < 0) return null;
int[][] matrix = new int[n][n];
int rowStart = 0, rowEnd = n - 1;
int colStart = 0, colEnd = n - 1;
int num = 1;
while (rowStart <= rowEnd) {
for (int j = colStart; j <= colEnd; j++) {//move right
matrix[rowStart][j] = num++;
}
rowStart++;
for (int i = rowStart; i <= rowEnd; i++) {//move down
matrix[i][colEnd] = num++;
}
colEnd--;
if (rowEnd >= rowStart) {
for (int j = colEnd; j >= colStart; j--) {//move left
matrix[rowEnd][j] = num++;
}
rowEnd--;
}
if (colEnd >= colStart) {
for (int i = rowEnd; i >= rowStart; i--) {//move up
matrix[i][colStart] = num++;
}
colStart++;
}
}
return matrix;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值