首页 技术 正文
技术 2022年11月16日
0 收藏 889 点赞 5,113 浏览 1551 个字

题目链接: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;
}
}; 
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,082
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,557
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,406
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,179
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,815
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898