题解 | #蛇形矩阵#
蛇形矩阵
https://ac.nowcoder.com/acm/problem/22231
蛇形矩阵
关键点
整个输出过程有上下左右四个方向,上下由行索引row和列索引col来控制,需要额外关心的是左右的变化,用一个flag来记录.一共有上下左右四个边界.只有到达边界的时候,左右方向会变化.
代码
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] matrix = generateSnakeMatrix(n);
printMatrix(matrix);
}
public static int[][] generateSnakeMatrix(int n) {
int[][] matrix = new int[n][n];
int num = 1;
int row = 0, col = 0;
boolean direction = true; // true: 向右,false: 向左
while (num <= n * n) {
matrix[row][col] = num;
num++;
if (direction) {
// 向右的情况
if(col == n - 1){
// 到达右边界,则就要向下一步,后续要向左.
row++;
direction = false;
}else if(row == 0){
// 如果是首行,则向右一步
col++;
direction = false;
}else{
// 其他情况都是向右上走
col++;
row--;
}
} else {
// 向左的情况
if(row == n - 1){
// 到达下边界,则要向右一步,后续要向右
col++;
direction = true;
}else if(col == 0){
// 如果是首列,则向下一步
row++;
direction = true;
}else{
// 其他情况都是向左下走
row++;
col--;
}
}
}
return matrix;
}
public static void printMatrix(int[][] matrix) {
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[0].length; j++) {
System.out.print(matrix[i][j]);
if(j != matrix[0].length) System.out.print(" ");
}
System.out.println();
}
}
}