目 录CONTENT

文章目录

756. 蛇形矩阵

Gz
Gz
2022-06-30 / 0 评论 / 0 点赞 / 258 阅读 / 1,159 字 / 正在检测是否收录...

756. 蛇形矩阵

输入两个整数 nn 和 mm,输出一个 nn 行 mm 列的矩阵,将数字 11 到 n×mn×m 按照回字蛇形填充至矩阵中。

具体矩阵形式可参考样例。

输入格式

输入共一行,包含两个整数 nn 和 mm。

输出格式

输出满足要求的矩阵。

矩阵占 nn 行,每行包含 mm 个空格隔开的整数。

数据范围

1≤n,m≤1001≤n,m≤100

输入样例:

3 3

输出样例:

1 2 3
8 9 4
7 6 5

蛇形矩阵

就是这样的矩阵:

输出矩阵高度和宽度,输出矩阵。

题解:

用 left 指向待输出部分的最左侧,right 指向待输出部分的最右侧,top 指向待输出部分的最上侧,bottom 指向待输出部分的最下侧。

循环指向:

  1. 从左到右构造最上侧的一行,待出去部分的最上侧下移,然后top+1。
  2. 从上到下构造最右侧的一列,待输出部分的最右侧左移,然后right-1。
  3. 从右到左构造最下方的一行,待输出部分的最下侧上移,然后bottom-1。
  4. 从下到上构造最右侧的一列。待输出部分的最左侧右移。然后left+1。

直到:left < right && top < bottom

示意图:

1

代码

import java.util.*;

public class Main {
    public static void main(String[] args)throws Exception {
        Scanner scanner = new Scanner(System.in);
        int[][] arr = new int[110][110];

        int n, m;
        n = scanner.nextInt();
        m = scanner.nextInt();

        int l = 0, r = m - 1;
        int top = 0 , bottom = n - 1;
        int k = 1;

        while (l <= r && top <= bottom) {
            //上面一行
            for (int i = l ; i <= r && top <= bottom ; i ++) {
                arr[top][i] = k++;
            }
            top ++;
            //右边一行
            for (int i = top ; i <= bottom && l <= r ; i ++) {
                arr[i][r] = k ++;
            }
            r--;
            //下面一行
            for (int i = r ; i >= l && top <= bottom; i --) {
                arr[bottom][i] = k ++;
            }
            bottom--;
            //左边一行
            for (int i = bottom; i >= top && l <= r; i--) {
                arr[i][l] = k ++;
            }
            l++;
        }

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                System.out.printf("%d ",arr[i][j]);
            }
            System.out.println();
        }

    }
}

运行结果:

image-20220630180326462

0

评论区