Leetcode(59)---スパイラルマトリックス||

記事のディレクトリ

トピック

59.スパイラルマトリックスII

正の整数nを指定して、1からn2までのすべての要素を含むnxn正方行列行列を生成します。要素は、時計回りにらせん状に配置されます。

例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