Directorio de artículos
tema
59. Matriz espiral II
Darle un entero positivo n para generar una matriz de matriz cuadrada nxn que contenga todos los elementos de 1 a n2, y los elementos están dispuestos en espiral en el sentido de las agujas del reloj.
Ejemplo 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
Ejemplo 2:
输入:n = 1
输出:[[1]]
inmediato:
1 <= n <= 20
Solución de problemas (Java)
class Solution {
public int[][] generateMatrix(int n)
{
//行坐标
int i = 0;
//列坐标
int j = 0;
//数目
int count = 0;
//结果矩阵
int[][] result = new int[n][n];
int row = n;
while(true)
{
//填充从左到右的行
for(int index = 0;index < row;index++)
{
//最后一个数,只加行,不加列
if(index == row - 1)
{
result[i++][j] = ++count;
}
else
{
result[i][j++] = ++count;
}
}
//判断是否已经结束
if(count == n*n)
{
break;
}
row--;
//填充从上到下的行
for(int index = 0;index < row;index++)
{
//最后一个数,只减列,不加行
if(index == row - 1)
{
result[i][j--] = ++count;
}
else
{
result[i++][j] = ++count;
}
}
//判断是否已经结束
if(count == n*n)
{
break;
}
//填充从右到左的行
for(int index = 0;index < row;index++)
{
//最后一个数,只减行,不减列
if(index == row - 1)
{
result[i--][j] = ++count;
}
else
{
result[i][j--] = ++count;
}
}
row--;
//判断是否已经结束
if(count == n*n)
{
break;
}
//填充从下到上的行
for(int index = 0;index < row;index++)
{
//最后一个数,只加列,不减行
if(index == row - 1)
{
result[i][j++] = ++count;
}
else
{
result[i--][j] = ++count;
}
}
//判断是否已经结束
if(count == n*n)
{
break;
}
}
return result;
}
}