Leetcode(59)---螺旋矩阵 ||

文章目录

题目

59.螺旋矩阵 II

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

示例 1:

在这里插入图片描述

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2:

输入:n = 1
输出:[[1]]

提示:

1 <= n <= 20

题解(Java)

class Solution {
    
    
    public int[][] generateMatrix(int n) 
    {
    
    
        //行坐标
        int i = 0;
        //列坐标
        int j = 0;
        //数目
        int count = 0;
        //结果矩阵
        int[][] result = new int[n][n];
        int row = n;
        while(true)
        {
    
    
            //填充从左到右的行
            for(int index = 0;index < row;index++)
            {
    
    
                //最后一个数,只加行,不加列
                if(index == row - 1)
                {
    
    
                    result[i++][j] = ++count;
                }
                else
                {
    
    
                    result[i][j++] = ++count;
                }
            }
            //判断是否已经结束
            if(count == n*n)
            {
    
    
                break;
            }
            row--;
            //填充从上到下的行
            for(int index = 0;index < row;index++)
            {
    
    
                //最后一个数,只减列,不加行
                if(index == row - 1)
                {
    
    
                    result[i][j--] = ++count;
                }
                else
                {
    
    
                    result[i++][j] = ++count;
                }
            }
            //判断是否已经结束
            if(count == n*n)
            {
    
    
                break;
            }
            //填充从右到左的行
            for(int index = 0;index < row;index++)
            {
    
    
                //最后一个数,只减行,不减列
                if(index == row - 1)
                {
    
    
                    result[i--][j] = ++count;
                }
                else
                {
    
    
                    result[i][j--] = ++count;
                }
            }
            row--;
            //判断是否已经结束
            if(count == n*n)
            {
    
    
                break;
            }
            //填充从下到上的行
            for(int index = 0;index < row;index++)
            {
    
    
                //最后一个数,只加列,不减行
                if(index == row - 1)
                {
    
    
                    result[i][j++] = ++count;
                }
                else
                {
    
    
                    result[i--][j] = ++count;
                }
            }
             //判断是否已经结束
            if(count == n*n)
            {
    
    
                break;
            }
        }
        return result;
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46841376/article/details/114871988