zoukankan      html  css  js  c++  java
  • LeetCode 59. Spiral Matrix II (螺旋矩阵之二)

    Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

    For example,
    Given n = 3,

    You should return the following matrix:
    [
     [ 1, 2, 3 ],
     [ 8, 9, 4 ],
     [ 7, 6, 5 ]
    ]
    

    题目标签:Array
      这道题目和之前的螺旋矩阵几乎没有区别,而且更简单。同样按照螺旋矩阵的特性,设置4个边界,rowBegin = 0, rowEnd = n-1, colBegin = 0, colEnd = n-1。
      螺旋矩阵的走法:num = 1; 每次把num++代入矩阵
        1.从rowBegin 这一行开始, 从左往右走 [colBegin ~ colEnd],走完把rowBegin++,这行已经走完不需要了。
        2.从colEnd 这一列开始,从上往下走 [rowBegin ~ rowEnd],走完把colEnd--,这列不需要了。
        3.从rowEnd 这一行开始,从右往左走 [colEnd ~ colBegin],走完把rowEnd--, 这行不需要了。
        4.从colBegin 这一列开始,从下往上走 [rowEnd ~ rowBegin],走完把colBegin++,这列不需要了。
     
    相比与螺旋矩阵之1, 这题的矩阵都是n*n,所以不需要在每一个for loop 里设置额外条件,因为螺旋矩阵1 里面给的是 m*n 可能不是正方形。
     
     
     

    Java Solution:

    Runtime beats 57.87% 

    完成日期:07/20/2017

    关键词:Array

    关键点:螺旋矩阵的遍历模式;设置四个边界值

     1 public class Solution 
     2 {
     3     public int[][] generateMatrix(int n) 
     4     {
     5         int[][] res = new int[n][n];
     6         
     7         int total = n*n;
     8         int num = 1;
     9         
    10         int rowBegin = 0;
    11         int rowEnd = n-1;
    12         int colBegin = 0;
    13         int colEnd = n-1;
    14         
    15         while(num <= total)
    16         {
    17             // traverse right (y changes)
    18             for(int y=colBegin; y<=colEnd; y++)
    19                 res[rowBegin][y] = num++;
    20             
    21             rowBegin++; // move down one row
    22             
    23             // traverse down (x changes)
    24             for(int x=rowBegin; x<=rowEnd; x++)
    25                 res[x][colEnd] = num++;
    26             
    27             colEnd--; // move left one column
    28             
    29             // traverse left (y changes)
    30             for(int y=colEnd; y>=colBegin; y--)
    31                 res[rowEnd][y] = num++;
    32             
    33             rowEnd--; // move up one row
    34             
    35             // traverse up (x changes)
    36             for(int x=rowEnd; x>=rowBegin; x--)
    37                 res[x][colBegin] = num++;
    38             
    39             colBegin++; // move right one column
    40             
    41         }
    42         
    43         return res;
    44     }
    45 }

    参考资料:N/A

    LeetCode 算法题目列表 - LeetCode Algorithms Questions List

  • 相关阅读:
    js 定时器 执行一次和重复执行
    Django 会议室预定
    关于跨域介绍和djiago解决跨域问题
    原生Form 和 Form组件 Modelform
    关于Djiango中 前端多对多字段点(,)的显示问题
    Djiango权限组件
    关于 or 判断都是Ture的问题
    基于多对多字段的增删改查
    二.面向对象进阶
    python大数据初探--pandas,numpy代码示例
  • 原文地址:https://www.cnblogs.com/jimmycheng/p/7215630.html
Copyright © 2011-2022 走看看