顺时针打印矩阵

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值