博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode:Spiral Matrix I II
阅读量:7142 次
发布时间:2019-06-29

本文共 2087 字,大约阅读时间需要 6 分钟。

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

For example, 

Given the following matrix:

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

You should return [1,2,3,6,9,8,7,4,5].

 

打印螺旋矩阵

逐个环的打印, 对于m *n的矩阵,环的个数是 (min(n,m)+1) / 2。对于每个环顺时针打印四条边。

注意的是:最后一个环可能只包含一行或者一列数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class 
Solution {
public
:
    
vector<
int
> spiralOrder(vector<vector<
int
> > &matrix) {
        
int 
m = matrix.size(), n;
        
if
(m != 0)n = matrix[0].size();
        
int 
cycle = m > n ? (n+1)/2 : (m+1)/2;
//环的数目
        
vector<
int
>res;
         
        
int 
a = n, b = m;
//a,b分别为当前环的宽度、高度
        
for
(
int 
i = 0; i < cycle; i++, a -= 2, b -= 2)
        
{
            
//每个环的左上角起点是matrix[i][i],下面顺时针依次打印环的四条边
            
for
(
int 
column = i; column < i+a; column++)
                
res.push_back(matrix[i][column]);
            
for
(
int 
row = i+1; row < i+b; row++)
                
res.push_back(matrix[row][i+a-1]);
            
if
(a == 1 || b == 1)
break
;
//最后一个环只有一行或者一列
            
for
(
int 
column = i+a-2; column >= i; column--)
                
res.push_back(matrix[i+b-1][column]);
            
for
(
int 
row = i+b-2; row > i; row--)
                
res.push_back(matrix[row][i]);
        
}
        
return 
res;
    
}
};

 


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 ]]

本质上和上一题是一样的,这里我们要用数字螺旋的去填充矩阵。同理,我们也是逐个环的填充,每个环顺时针逐条边填充                 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class 
Solution {
public
:
    
vector<vector<
int
> > generateMatrix(
int 
n) {
        
vector<vector<
int
> > matrix(n, vector<
int
>(n));
        
int 
a = n;
//a为当前环的边长
        
int 
val = 1;
        
for
(
int 
i = 0; i < n/2; i++, a -= 2)
        
{
            
//每个环的左上角起点是matrix[i][i],下面顺时针依次填充环的四条边
            
for
(
int 
column = i; column < i+a; column++)
                
matrix[i][column] = val++;
            
for
(
int 
row = i+1; row < i+a; row++)
                
matrix[row][i+a-1] = val++;
            
for
(
int 
column = i+a-2; column >= i; column--)
                
matrix[i+a-1][column] = val++;
            
for
(
int 
row = i+a-2; row > i; row--)
                
matrix[row][i] = val++;
        
}
        
if
(n % 2)matrix[n/2][n/2] = val;
//n是奇数时,最后一个环只有一个数字
        
return 
matrix;
    
}
};

 

本文转自tenos博客园博客,原文链接:http://www.cnblogs.com/TenosDoIt/p/3774747.html,如需转载请自行联系原作者
你可能感兴趣的文章
ELK 实验(五)配置数据源和仪表盘
查看>>
centos 6.3搭建个人私有云存储owncloud
查看>>
PHP中的浅拷贝和深拷贝
查看>>
利用redis-sentinel+keepalived实现redis高可用
查看>>
CloudStack4.2登录报用户名或密码错误问题解析
查看>>
逻辑备库之ORA-01403解决方法
查看>>
MySQL Replication(复制)基本原理
查看>>
分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(12月5日-12月11日)
查看>>
十年老站吐血迁移实录
查看>>
配置Exchange2010的边缘传输服务器
查看>>
我的家庭私有云计划-7
查看>>
Word中使用正则表达式进行查找和替换
查看>>
Cocos2d-x Eclipse下程序运行产生错误Effect initCheck() returned -1
查看>>
微软MVP社区巡讲
查看>>
Silverlight3游戏开发之空当接龙基础篇
查看>>
.NET深入解析LINQ框架(二:LINQ优雅的前奏)
查看>>
虚弱的原则
查看>>
我的友情链接
查看>>
为什么网络棋牌的分成那么高?
查看>>
答案永远在现场
查看>>