59.螺旋矩阵II

本文详细介绍了LeetCode第59题‘螺旋矩阵II’的解决方案。通过遵循左闭右开的原则,依次填充矩阵的四边,实现螺旋填充。解法中给出了具体的Java代码实现,包括四个方向的填充循环,并在每次填充后收窄边界,最后处理可能剩余的1x1矩阵。此算法适用于构建指定大小的螺旋矩阵。
摘要由CSDN通过智能技术生成

题目

59.螺旋矩阵II
在这里插入图片描述

思路

  • 遵循左闭右开,即一次填充一边,拐角处交给下一边来填充

解法

class Solution {
    public int[][] generateMatrix(int n) {
        int ans[][] = new int[n][n];
        int k=1, nn=n*n;
        int mini=0, maxi=n-1, minj=0, maxj=n-1; // 
        while(k < nn){
            //遵循左闭右开,即一次填充一边,拐角处交给下一边来填充
            for(int j = minj ; j < maxj ; j++)  ans[mini][j] = k++; // →
            for(int i = mini ; i < maxi ; i++)  ans[i][maxj] = k++; // ↓
            for(int j = maxj ; j > minj ; j--)  ans[maxi][j] = k++; // ←
            for(int i = maxi ; i > mini ; i--)  ans[i][minj] = k++; // ↑
            mini++; maxi--; minj++; maxj--; // 收窄
        }
        if(n%2 == 1)    ans[mini][minj] = k; // 特判最后剩下的1*1矩阵
        return ans;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值