第59题:螺旋矩阵 II

一. 问题描述

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

 

示例:

输入: 3

输出:

[

 [ 1, 2, 3 ],

 [ 8, 9, 4 ],

 [ 7, 6, 5 ]

]

二. 解题思路

按照模拟往矩阵内填数依次填写

 * 步骤一:将数组依次填入到rf行中lf~ll列中,rf=rf+1,判断数组填完;

 * 步骤二:将数组依次填入到ll列的rf~rl行中,ll=ll-1,判断数组填完;

 * 步骤三:将数组依次填入到rl行中ll~lf列中,rl=rl-1,判断数组填完;

 * 步骤四:将数组依次填入到lf列的rl~rf行中,lf=lf+1,判断数组填完;

 * 第五步:重复步骤一

 

三. Java代码

class Solution {
   
     public int[][] generateMatrix(int n) {
            int rf=0,rl=n-1;     //表示行的标记
            int lf=0,ll=n-1;     //表示列的标记    
            int number=1;
            int[][] arr=new int[n][n];
            
            while(true)
            {
               for(int i=lf;i<=ll&&number<=(n*n);i++)
               {
                   arr[rf][i]=number;
                   number++;
               }
               rf=rf+1;
               
               for(int i=rf;i<=rl&&number<=(n*n);i++)
               {
                   arr[i][ll]=number;
                   number++;
               }
               ll=ll-1;
               
               for(int i=ll;i>=lf&&number<=(n*n);i--)
               {
                   arr[rl][i]=number;
                   number++;
               }
               rl=rl-1;
               
               for(int i=rl;i>=rf&&number<=(n*n);i--)
               {
                   arr[i][lf]=number;
                   number++;                   
               }
               lf=lf+1;
               
               if(number>(n*n))
               {
                   break;
               }                
            }
            
            return arr;
        }
}

 

posted @ 2019-10-10 10:35  fish大叔  阅读(209)  评论(0编辑  收藏  举报