java实现螺旋矩阵 letcode代码笔记

要如何画出这个螺旋排列的正方形矩阵呢?
要写出正确的螺旋矩阵一定要坚持循环不变量原则。
要在螺旋矩阵的过程中,保持不变量,就是在while寻找中每一次边界的处理都要坚持根据区间的定义来操作,这就是循环不变量规则。
而求解本题依然是要坚持循环不变量原则。
模拟顺时针画矩阵的过程:
填充上行从左到右
填充右列从上到下
填充下行从右到左
填充左列从下到上
由外向内一圈一圈这么画下去。
可以发现这里的边界条件非常多,在一个循环中,如此多的边界条件,如果不按照固定规则来遍历,那就是一进循环深似海,从此offer是路人。
这里一圈下来,我们要画每四条边,这四条边怎么画,每画一条边都要坚持一致的左闭右开,或者左开又闭的原则,这样这一圈才能按照统一的规则画下来。

区间的定义一般为两种,左闭右闭即[left, right],或者左闭右开即[left, right)。
思想
在这里插入图片描述

public static int[][] generateMatrix(int n) {
        int[][] a = new int[n][n];
        int jishuqi = 1;
        int i = 0, j = 0;//cishu代表每一轮该走几步   i代表行  j代表列
        int cihsu = n - 1;
        while (jishuqi <= n * n) {
            for (int k = cihsu; k > 0; k--){
                a[i][j] = jishuqi;
                jishuqi++;
                j++;
            }
            for (int k = cihsu; k > 0; k--) {
                a[i][j] = jishuqi;
                jishuqi++;
                i++;
            }
            for (int k = cihsu; k > 0; k--) {
                a[i][j] = jishuqi;
                jishuqi++;

                j--;
            }
            for (int k = cihsu; k > 0; k--) {
                a[i][j] = jishuqi;
                jishuqi++;
                i--;
            }
            i++;j++;
            cihsu--;
            cihsu--;
            if(jishuqi > n * n) {
                return a;
            }
            if(cihsu<0)
            {
                if (n % 2 == 1) {//n为单数,需要给中心最后一个数填值
                    a[n/2][n/2] =  jishuqi;
                }
                return a;
            }

        }
        return a;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值