LeetCode,59.螺旋矩阵II
给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
package com.leetcode.array;
/**
* 59.螺旋矩阵II
* 给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,
* 且元素按顺时针顺序螺旋排列的正方形矩阵。
*
* 示例:
*
* 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
*/
public class SpiralMatrix {
public static void main(String[] args) {
int n = 5;
int[][] spiraMartix = spiraMartix(n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.print(spiraMartix[i][j] + " ");
}
System.out.println();
}
}
/**
* 每次左闭右开
*/
public static int[][] spiraMartix(int n){
int[][] nums = new int[n][n];
int loop = 0;//控制循环次数
int i,j; //i,j 分别控制行号、列号
int start = 0; //控制每次开始的起点
int count = 1;//控制数字(1-n^2)
while (loop++ < n/2){
//模拟上方从左到→右
for(j = start; j < n - loop; j++) {
nums[start][j] = count++;
}
//模拟右侧从上到下
for (i = start; i < n - loop; i++) {
nums[i][j] = count++;
}
//模拟下方的从左到右
for (; j >= loop; j--) {
nums[i][j] = count++;
}
//模拟左侧从下到上
for (; i >= loop; i--) {
nums[i][j] = count++;
}
start++;
}
if(n % 2 == 1) nums[start][start] = count;
return nums;
}
}