059. Spiral Matrix II
题目链接: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;
}
};
059. Spiral Matrix II的更多相关文章
- Java for LeetCode 059 Spiral Matrix II
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For ...
- 059 Spiral Matrix II 旋转打印矩阵 II
给出正整数 n,生成正方形矩阵,矩阵元素为 1 到 n2 ,元素按顺时针顺序螺旋排列.例如,给定正整数 n = 3,应返回如下矩阵:[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6 ...
- 【leetcode】Spiral Matrix II
Spiral Matrix II Given an integer n, generate a square matrix filled with elements from 1 to n2 in s ...
- 59. Spiral Matrix && Spiral Matrix II
Spiral Matrix Given a matrix of m x n elements (m rows, n columns), return all elements of the matri ...
- Spiral Matrix II
Spiral Matrix II Given an integer n, generate a square matrix filled with elements from 1 to n2 in s ...
- leetcode 54. Spiral Matrix 、59. Spiral Matrix II
54题是把二维数组安卓螺旋的顺序进行打印,59题是把1到n平方的数字按照螺旋的顺序进行放置 54. Spiral Matrix start表示的是每次一圈的开始,每次开始其实就是从(0,0).(1,1 ...
- LeetCode: Spiral Matrix II 解题报告-三种方法解决旋转矩阵问题
Spiral Matrix IIGiven an integer n, generate a square matrix filled with elements from 1 to n2 in sp ...
- 【leetcode】59.Spiral Matrix II
Leetcode59 Spiral Matrix II Given an integer n, generate a square matrix filled with elements from 1 ...
- Leetcode 54. Spiral Matrix & 59. Spiral Matrix II
54. Spiral Matrix [Medium] Description Given a matrix of m x n elements (m rows, n columns), return ...
随机推荐
- libusb_control_setup
libusb_fill_control_transfer(transfer, devh, buf, ctrl_urb_complete_cb, utrans, 1000); ...
- GitChat·人工智能 | 除了深度学习,机器翻译还需要啥?
本文开始要写作的时候,翻译圈里出了一个“爆炸性”的事件.6月27日下午,一个同传译员在朋友圈里爆料:某AI公司请这位译员去“扮演”机器同传,制造人工智能取代人工同传的“震撼”效果. 这个事件瞬间在译员 ...
- CSS基础学习-12.CSS position
绝对定位 position:absolute,元素脱离文档流,然后使用left.right.top.bottom属性相对于其最接近的一个具有定位属性的祖先元素进行绝对定位.如果不存在这样的祖先元素,则 ...
- Mybatis映射文件中数据库表列名称和POJO成员域的联系
下面是Mybatis的SQL映射文件. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ma ...
- puppet负载均衡之nginx+passenger
由于3.x系列已不再支持mongrel,所以就采用nginx+passenger来做负载均衡:之前有发过nginx+mongrel,puppet version是2.7系列的,所以还是可以用的: 环境 ...
- 寻找hive视图
如何hive视图 1.mysql数据库 [centos@s201 ~]$ mysql -uroot -proot mysql> show databases; +---------------- ...
- __slots__节约空间
1.为什么要使用__slots__ Python 使用 dicts(hash table)缓存大量的静态资源(属性). 我们最近在Image类中,用仅仅一行__slots__代码,改变成使用tuple ...
- javaScript--for循环的性能提升
//为什么性能提升? //第一种写法每次循环时都需要从内存中取出students.length并判断条件是否成立 //第二种写法只需要取一次students.length就可以 //第二种方式弊端:l ...
- http 中文乱码
string RawUrl = request.Request.RawUrl; string cc= HttpUtility.ParseQueryString(RawUrl.Substring(1, ...
- js的三种异步处理
js的三种异步处理 Promise 对象 含义: Promise是异步编程的一种解决方案, 优点: 相比传统回调函数和事件更加合理和优雅,Promise是链式编程(后面会详细讲述),有效的解决了令 ...