数组之螺旋矩阵II

59号题目
这道题是需要模拟的,一定要注意的一个原则就是要按照一个规则去循环下去,不能这次循环是定为A条件,下次循环是定为B条件,这样很混乱,个人感觉这道题是比较考验细节能力的,可能是本人比较菜的原因才有这样的感觉
比较重要的几个点
循环圈数为n/2,比如n为2,循环一圈,n为3循环一圈,n为4,循环2圈;这里n的奇偶也是有不同的处理的,n为偶数的话,循环完刚好所有的数都打印了,n为奇数的话,循环完最后还会剩下一个n这个数没有打印,然后正常将它打印就行了
每次的循环都是算第一个点,抛弃最后一个点,也就是左闭右开原则
更多细节详见代码注释

class Solution {
    public int[][] generateMatrix(int n) {
        int initialx = 0, initialy = 0;//每一次循环行列的起点
        int circle = 1;//循环圈数
        int i, j;
        int count = 1;//计数器,每走一个加一即可,走到n结束
        int[][] result = new int[n][n];
        while(circle <= n/2){//总共循环n/2圈
            for(j = initialy; j < n-circle; j++){//从左至右
                result[initialx][j] = count++;
            }
            for(i = initialx; i < n-circle; i++){//从上至下
                result[i][j] = count++;
            }
            for(; j > circle-1; j--){//从右至左
                result[i][j] = count++;
            }
            for(; i > circle-1; i--){//从下至上
                result[i][j] = count++;
            }
            initialx++;
            initialy++;
            circle++;
        }
        if(n % 2 ==1){//n为奇数
            result[initialx][initialx] = count;//最后一个数为n
        }
        return result;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值