力扣59题——螺旋矩阵 II

1.题目描述
2.解题思路
2.1理解题意
2.2解决方法
2.3完整代码
3.小节

1.题目描述:

螺旋矩阵 II

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

2.解题思路:

2.1理解题意:

从题目中我们需要注意三点:
1.遍历每一条边时的范围
2.循环次数的奇偶性,偶数直接循环,奇数则需要单独将最后一个数(n*n)放置中心位置处
3.没完成一次循环时,下一次循环的范围

2.2解决方法:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3完整代码:

在上述解题方法中,x代表横坐标,相当于第x列;y代表纵坐标,相当于第y行;
但是在数组中, int [][] result = new int[x][y]中x代表第x行;y代表第y列
所以在将坐标传入数组中时,横纵坐标的值需要交换

class Solution {
    public int[][] generateMatrix(int n) {
        int loop = 0;//控制循环圈数
        int count = 1;开始值
        int offset = 1;
        int startX = 0;起点横坐标
        int startY = 0;起点纵坐标
        int [][] result = new int[n][n]//新建二维数组,第一个n表示第n行,第二个n表示第n列
        int x,y;//x表示纵坐标,y表示横坐标

        while(loop++<n/2){
        //第一次进来loop=1;第二次进来loop=2
            for(x=startX;x<n-offset;x++){
                result[startY][x]=count++;
            }
            for(y=startY;y<n-offset;y++){
                result[y][x]=count++;
            }
            for(;x>startX;x--){
                result[y][x]=count++;
            }
            for(;y>startY;y--){
                result[y][x]=count++;
            }
            //下一次循环时起点的横纵坐标相对于上一次进行了加一
            startX++;
            startY++;
            offset++;
        }
        //如果n为奇数,就需要获取正方形矩阵的最后一个元素(即n*n)
        if(n%2!=0){
            result[startY][startX]=n*n;
        }
        return result;
    }
}

3.小节:

著此篇,与君享,互勉之,共进步!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值