zoukankan      html  css  js  c++  java
  • LeetCode Spiral Matrix II (技巧)

    题意:  

      从1开始产生连续的n2个数字,以螺旋的方式填满一个n*n的数组。

    思路:

      由于是填满一个矩阵,那么只需要每次都填一圈即可。应该注意特殊情况。

      迭代:

     1 class Solution {
     2 public:
     3     vector<vector<int> > generateMatrix(int n)
     4     {
     5         vector<vector<int> > ans(n,vector<int>(n));
     6         int cnt=0, i=0;
     7         while(1)
     8         {
     9             if(cnt==n*n)    break;
    10             for(int j=i; j<n-i; j++)    ans[i][j]=++cnt;
    11             for(int j=i+1; j<n-i; j++)    ans[j][n-i-1]=++cnt;
    12             for(int j=n-i-2; j>=i; j--)ans[n-i-1][j]=++cnt;
    13             for(int j=n-i-2; j>i; j--)    ans[j][i]=++cnt;
    14             i++;
    15         }
    16         return ans;
    17     }
    18 };
    AC代码

      

      递归:  

     1 class Solution {
     2 public:
     3     vector<vector<int> > ans;
     4     int n;
     5     void generate(int i,int cnt)
     6     {
     7         if(cnt==n*n)    return ;
     8         for(int j=i; j<n-i; j++)    ans[i][j]=++cnt;
     9         for(int j=i+1; j<n-i; j++)    ans[j][n-i-1]=++cnt;
    10         for(int j=n-i-2; j>=i; j--)ans[n-i-1][j]=++cnt;
    11         for(int j=n-i-2; j>i; j--)    ans[j][i]=++cnt;
    12         generate(i+1,cnt);
    13     }
    14     
    15     
    16     vector<vector<int> > generateMatrix(int n)
    17     {
    18         ans=vector<vector<int> >(n,vector<int>(n));
    19         this->n=n;
    20         generate(0, 0);
    21         return ans;
    22     }
    23 };
    AC代码
  • 相关阅读:
    ecmall 开发一个新模块
    ecmall 如何新增挂件
    ecmall 主从表的4种模型关系
    ecmall 的一些方法说明
    ecmall 支付成功 订单状态没有改变解决办法
    ecmall 基础类分析
    phpcms 新建模块安装
    phpcms pc_base::load
    strptime()方法
    GDB调试方法精粹
  • 原文地址:https://www.cnblogs.com/xcw0754/p/4937053.html
Copyright © 2011-2022 走看看