顺时针打印矩阵


顺时针打印矩阵

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

题目意思是要将矩阵顺时针打印出来

  • 在剑指offer中也有类似试题

解题思路以下:

视察矩形 以下 看成1个圈 上行 右列 下行 左列

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

矩形rows 行数为3 cols列数为3 行跟列都有1个范围 行数的范围为0到2 列数的范围为 0到2

设 rowstart=0 rowend=2 colstart=0 colend=2 分别辨识行的起始、结束 和列的起始和结束

打印先从第1行开始 也就是 1 2 3 开始 此时

行不变 行动rowstart 列的变化为 colstart 到 colend 也就是 0到2 number[rowstart][i] i表示列 打印完以后 rowstart ++ 表示行数往下扩大

接着打印当前 最右侧列 6 9

此时列不变成 colend 行变化 为 rowstart 到 rowend 打印完后 colend– 表示列变小

接着打印当前最下边行 8 7

同上,此时 行不变 列出 colend 变到colstart 打印完后 rowend 减小 往上走

接着打印 4

4为第1圈的最后1个边界 此时列不变 行从rowend到 rowstart 打印完后 colstart++ 列变大 往右走

上面为1个圈,接着循环就是,直到 rowstart > rowend 或 colstart > colend

代码以下:

class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {

vector<int> result;
if(matrix.size()==0)
return result;
int m=matrix.size()⑴;
int n=matrix[0].size()⑴;

int sn=0;
int sm=0;
int i;
while(true)
{
for(i=sn;i<=n;i++)
result.push_back(matrix[sm][i]);
if(++sm>m)
break;

for(i=sm;i<=m;i++)
result.push_back(matrix[i][n]);

if(--n<sn)
break;

for(i=n;i>=sn;i--)
result.push_back(matrix[m][i]);
if(--m<sm)
break;

for(i=m;i>=sm;i--)
result.push_back(matrix[i][sn]);
if(++sn>n)
break;

}
return result;
}
};

带测试的代码

#include<iostream>
using namespace std;

void printMatrix(int number[3][4],int rows,int cols)
{
int rowstart=0;
int rowend=rows-1;
int colstart=0;
int colend=cols-1;

while(rowstart<=rowend&&colstart<=colend)
{
int i;
for( i=colstart;i<=colend;i++)
{
cout<<number[rowstart][i]<<" ";
}
++rowstart;
if(rowstart>rowend)
break;
for( i=rowstart;i<=rowend;i++)
{
cout<<number[i][colend]<<" ";
}
--colend;
if(colend<colstart)
break;
for( i=colend;i>=colstart;i--)
{
cout<<number[rowend][i]<<" ";

}
--rowend;
if(rowend<rowstart)
break;
for( i=rowend;i>=rowstart;i--)
{
cout<<number[i][colstart]<<" ";
}
++colstart;
if(colstart>colend)
break;
}

}

int main()
{
int number[3][4]={1,2,3,4,10,11,12,5,9,8,7,6};
printMatrix(number,3,4);
}



波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 本站源码并不保证全部能正常使用,仅供有技术基础的人学习研究,请谨慎下载
8. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » 顺时针打印矩阵

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡