顺时针打印矩阵
来源:互联网 发布:什么是好的域名 编辑:程序博客网 时间:2024/05/07 07:15
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
解题思路
顺时针打印一个矩阵,假设该矩阵左上角为(r_s,c_s),右下角为(r_e,c_e)。分五种情况讨论:
1. 当矩阵为空时,打印数组为空;
2. 如果矩阵只有一个数或者只剩一个元素遍历的时候,条件是r_s == r_e && c_s == c_e,将该元素打印即可;
3. 如果矩阵只有一行或者只剩一行遍历的时候,条件是r_s == r_e && c_s < c_e,打印该行既可;
4. 如果矩阵只有一列或者只剩一列遍历的时候,r_s < r_e && c_s == c_e,打印该列即可;
5. 如果有多行或者多列时,从(r_s,c_s)开始顺时针打印;打印完之后r_s++;c_s++;r_e--;c_e--;再从第二种情况判断;
源代码
//顺时针打印矩阵
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> result;
int m = matrix.size();//行数
if(m <= 0)
return result;
int n = matrix[0].size();//列数
if(n <= 0)
return result;
int r_s = 0 , c_s = 0 , r_e = m-1 , c_e = n-1;
int r,c;
while(r_s <= r_e && c_s <= c_e)
{
//表示该点是最后一个元素或者是惟一的一个元素
if(r_s == r_e && c_s == c_e)
{
result.push_back(matrix[r_s][c_s]);
return result;
}
//只有一行
else if(r_s == r_e && c_s < c_e)
{
for(c = c_s ; c <= c_e ; c++)
result.push_back(matrix[r_s][c]);
return result;
}
//只有一列
else if(c_s == c_e && r_s < r_e)
{
for(r= r_s ; r <= r_e ; r++)
result.push_back(matrix[r][c_s]);
return result;
}
else
{
for(r = r_s , c = c_s ; c < c_e ; c++)
result.push_back(matrix[r][c]);
for(; r < r_e ; r++)
result.push_back(matrix[r][c]);
for( ; c > c_s ; c--)
result.push_back(matrix[r][c]);
for( ; r > r_s ; r--)
result.push_back(matrix[r][c]);
r_s++;
c_s++;
r_e--;
c_e--;
}
}
return result;
}
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 矩阵顺时针打印
- 顺时针打印矩阵
- 顺时针打印矩阵[算法]
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- IOS 判断设备屏幕尺寸、分辨率
- 架构设计:系统间通信(9)——通信管理与RMI 下篇
- 【FAQ】Jenkins Gerrit trigger,如何触发除了master外的所有分支?
- 杭电-4505小Q系列故事——电梯里的爱情
- 函数
- 顺时针打印矩阵
- vim琐碎知识点
- 黑马程序员——java学习日记八
- CoreData 基础
- ios8中的UIScreen
- 小小菜之Cocos2d-x游戏开发旅程——Lua打包apk
- Windows API教程文件系统
- inode的理解
- Detecting iPhone 6/6+ screen sizes in point values