题解 | #蛇形矩阵#

蛇形矩阵

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();
        }
    }
}
全部评论

相关推荐

11-18 15:57
门头沟学院 Java
最终归宿是测开:这个重邮的大佬在重邮很有名的,他就喜欢打92的脸,越有人质疑他,他越觉得爽😂
点赞 评论 收藏
分享
SinyWu:七院电话面的时候问我有没有女朋友,一听异地说你赶紧分。我:???
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务