题目链接:https://leetcode.com/problems/spiral-matrix-ii/description/

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

Example:

Input: 3
Output:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]

思路:

  • 本题和54.Spiral Matrix思路上基本一致,只不过本题是要求在矩阵中填入数据,但两者对矩阵的遍历方式一样;
  • 遍历矩阵的思路可以查看这篇博文:54.Spiral Matrix

  注意:这种方式定义容器vector<vector<int>> matrix(n * n); 容器元素的值是未定义的随机值,编译会导致:EXC_BAD_ACCESS (code=1, address=0x0)错误。

  处理方式有两种:

 // 第一种方式:
vector<vector<int>> matrix(n, vector<int>(n)); // 第二种方式:
vector<vector<int> > matrix(n);
for ( int i = ; i < n ; i++ )
matrix[i].resize(n);

  这样就能保证matrix中的每个元素初值为:0;

编码如下

 class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
// vector<vector<int> > matrix(n);
// for ( int i = 0 ; i < n ; i++ )
// matrix[i].resize(n);
vector<vector<int>> matrix(n, vector<int>(n)); int loop = n / + n % ; int i = , j = ; // matrix[i][j]
int num = ;
while (loop-- > )
{
int left_Up = , right_Up = n - j, right_Down = n - i, left_Down = ;
// 从左上角 -> 右上角 (i, left_Up) -> (i, right_Up) == (i, left_Up)
for (left_Up = j; left_Up < right_Up && num <= n * n; ++left_Up)
{
matrix[i][left_Up] = num++;
}
left_Up--; // 从右上角 -> 右下角 (right_Up = i+1, left_Up) -> (right_Down, left_Up) == (right_Up, left_Up)
for (right_Up = i + ; right_Up < right_Down && num <= n * n; ++right_Up)
{
matrix[right_Up][left_Up] = num++;
}
right_Up--; // 从右下角 -> 左下角 (right_Up, right_Down = left_Up - 1) -> (right_Up, j) == (right_Up, right_Down)
for (right_Down = left_Up - ; right_Down >= j && num <= n * n; --right_Down)
{
matrix[right_Up][right_Down] = num++;
}
right_Down++; // 从左下角 -> 左上角 (left_Up = right_Up - 1, right_Down) -> (i++, right_Down) == (left_Up, right_Down)
i++;
for (left_Up = right_Up - ; left_Up >= i && num <= n * n; --left_Up)
{
matrix[left_Up][right_Down] = num++;
}
j++;
} return matrix;
}
}; 

最新文章

  1. 使用netty4.x客户端接收较大数据量报文时发生的读取不完整bug修复记录
  2. 利用react native创建一个天气APP
  3. 创建数据库指定路径sql
  4. Jquery attr判断服务器单选按钮失败
  5. 17.Quartus 怎么回读CPLD里面的东西
  6. 51Nod 1405 树的距离之和 (树dp)
  7. android显示手机电量
  8. [NYOJ 536] 开心的mdd
  9. C++学习笔录4
  10. 下拉菜单中的Option对象
  11. Java学习01
  12. (Java 多线程系列)java synchronized详解
  13. 给你的网站免费配置上 HTTPS 证书
  14. 《深入理解Bootstrap》读书笔记(二)
  15. 关于TCP/IP,必知必会的十个经典问题[转]
  16. Git报错 bad numeric config value &#39;100000&#39; for &#39;pack.windowmemory&#39;: out of range
  17. QPixmap 在非QtCreator环境下无法显示jpg图片
  18. SCOI2016 Day1 简要题解
  19. 在 fragment 里面调用 findViewById
  20. Apache的ProxyPass简单使用

热门文章

  1. Android异常与性能优化相关面试问题-内存泄漏面试问题讲解
  2. kotlin函数和函数式表达式
  3. Java通过腾讯邮箱发送邮件
  4. gRPC应用实践
  5. HDU 6040 - Hints of sd0061 | 2017 Multi-University Training Contest 1
  6. 【Python网络】子网划分
  7. javaScript高级3笔记2
  8. URAL 2036 Intersect Until You&#39;re Sick of It 形成点的个数 next_permutation()函数
  9. noi.ac #534 猫
  10. Java当中的集合框架Map