LeetCode0058.螺旋矩阵

59.螺旋矩阵 II

描述

给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

实例

输入: 3
输出:
[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]
]

题解

画一下示意图就可以知道,每条边长是有规律的

  • ​第一圈: ​ ​ ➡️n; ⬇️n-1; ⬅️n-1; ⬆️n-2;
  • ​第二圈: ➡️n-2; ⬇️n-3; ⬅️n-3; ⬆️n-4;
  • ​第三圈: ➡️n-4; ⬇️n-5; ⬅️n-5; ⬆️n-6;

而且当n为奇数时,会在某一圈的➡️后结束,如果n为偶数时,会在某一圈的⬅️后结束,因此只要在完成这两个方向之后检查counter的值是否超过了n^2即可.

public static int[][] generateMatrix(int n) {
    int[][] result = new int[n][n];
    int counter = 1;
    int flag = 1;//记录当前第几圈
    int[] steps = new int[4];//记录这一圈中每个方向需要走几步
    int x = -1;
    int y = 0;

    while (true){
        steps[0] = n - 2*(flag-1);
        steps[1] = steps[0] - 1;
        steps[2] = steps[0] - 1;
        steps[3] = steps[2] - 1;

        for (int i = 0; i < steps[0]; i++) {
            x++;
            result[y][x] = counter;
            counter++;
        }
        if (counter > Math.pow(n,2))
            break;

        for (int i = 0; i < steps[1]; i++) {
            y++;
            result[y][x] = counter;
            counter++;
        }

        for (int i = 0; i < steps[2]; i++) {
            x--;
            result[y][x] = counter;
            counter++;
        }
        if (counter > Math.pow(n,2))
            break;

        for (int i = 0; i < steps[3]; i++) {
            y--;
            result[y][x] = counter;
            counter++;
        }
        flag++;
    }
    return result;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值