LeetCode:59. 螺旋矩阵 II

🍎道阻且长,行则将至。🍓

🌻算法,不如说它是一种思考方式🍀


算法专栏: 👉🏻123


一、🌱59. 螺旋矩阵 II

  • 题目描述:给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix
  • 来源:力扣(LeetCode)
  • 难度:中等
  • 提示:
    1 <= n <= 20
  • 示例 1:
    在这里插入图片描述
    输入:n = 3
    输出:[[1,2,3],[8,9,4],[7,6,5]]

🌴解题

模拟方向

本题只需要考虑:右 下 左 上,四种走向是循环来的,因此定义一个变量 direction,分别赋值 0 右,1 下,2 左,3 上,每个走向结束就 +1 再对 4 取余。
右 下 左 上 四个走向其实只需要控制 x y 坐标的某一个进行加减,主要是判断何时到达边界:数组边界、数组有值。

code

class Solution {
    public int[][] generateMatrix(int n) {
        int[][] ans=new int[n][n];
        if(n==1) {
            ans[0][0] = 1;
            return ans;
        }
        int direction=0;//0右 1下 2左 3上
        int i=0,j=-1;//坐标
        int k = 1;
        boolean tag=true;
        while(tag){
            switch (direction){
                case 0:
                    j++;
                    for (; j < n; j++) {
                        if(ans[i][j]!=0)
                            break;
                        ans[i][j]=k;
                        k++;
                    }
                    j--;
                    direction=(direction + 1) % 4;
                    if(ans[i+1][j]!=0)
                        tag=false;
                    break;
                case 1:
                    i++;
                    for (; i < n; i++) {
                        if(ans[i][j]!=0)
                            break;
                        ans[i][j]=k;
                        k++;
                    }
                    i--;
                    direction=(direction + 1) % 4;
                    if(ans[i][j-1]!=0)
                        tag=false;
                    break;
                case 2:
                    j--;
                    for (; j >=0 ; j--) {
                        if(ans[i][j]!=0) {
                            break;
                        }
                        ans[i][j]=k;
                        k++;
                    }
                    j++;
                    direction=(direction + 1) % 4;
                    if(ans[i-1][j]!=0)
                        tag=false;
                    break;
                case 3:
                    i--;
                    for (; i >=0; i--) {
                        if(ans[i][j]!=0)
                            break;
                        ans[i][j]=k;
                        k++;
                    }
                    i++;
                    direction=(direction + 1) % 4;
                    if(ans[i][j+1]!=0)
                        tag=false;
                    break;
            }

        }
        return ans;
    }
}

在这里插入图片描述


返回第一页。☝

🌵 杂诗
人生无根蒂,飘如陌上尘。
分散逐风转,此已非常身。
落地为兄弟,何必骨肉亲!
得欢当作乐,斗酒聚比邻。
盛年不重来,一日难再晨。
及时当勉励,岁月不待人。

陶渊明(352 或 365 年 — 427 年),字元亮,又名潜,私谥“靖节”,世称靖节先生,浔阳柴桑(今江西省九江市)人。东晋末至南朝宋初期伟大的诗人、辞赋家。


☕物有本末,事有终始,知所先后。🍭

🍎☝☝☝☝☝我的CSDN☝☝☝☝☝☝🍓

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Super algorithm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值