剑指offer--->顺时针打印矩阵
来源:互联网 发布:有道英语翻译软件下载 编辑:程序博客网 时间:2024/06/01 12:17
题目:
例如:如果输入如下矩阵:
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。
根据下图,对于矩阵我们可以进行一圈一圈的打印。
那么下面就是判断每次打印的条件:
下面分析打印一圈数据时需要注意的问题:
写代码时需要注意:
要一圈一圈的打印矩阵,那么就可以借助循环来做,至于循环的结束条件:
我们可以知道,一圈一圈打印矩阵时的左上角的下标为(start,start),x和y下标相等。
1、边界条件,千万不要重复打印
2.只有在rows > 2 * start && cols > 2 * start时,说明还没有打印到中间位置,所以可以继续打印。
3.需要特别注意每一步打印的条件。
#include<vector>class Solution {public: //打印一圈:只要是打印一圈数据,那么左上角的x和y下标肯定会相等。 void PrintMatrixInCircle(vector<vector<int>>& matrix,vector<int>& res,int start) { int rows = matrix.size(); if(rows < 1) { return ; } int cols = matrix[0].size(); int endX = rows - 1 - start; int endY = cols - 1 - start; //先打印第一步 int i = 0; int j = 0; for(i = start; i <= endY; ++i) { res.push_back(matrix[start][i]); cout<< matrix[start][i]<<" "; } //判断是否需要打印第二步 if(endX > start) { for(j = start + 1; j <= endX; ++j) { res.push_back(matrix[j][endY]); cout<<matrix[j][endY]<<" "; } } //判断是够需要打印第三步 if(endX > start && endY > start) { for(j = endY- 1; j >= start; --j) { res.push_back(matrix[endX][j]); cout<<matrix[endX][j]<<" "; } } //判断是否需要打印第四步 if(endX - start >= 2 && endY > start) { for(i = endX - 1; i > start; --i) { cout<<matrix[i][start]<<" "; res.push_back(matrix[i][start]); } } } vector<int> printMatrix(vector<vector<int> > matrix) { vector<int> res; res.clear(); int rows = matrix.size(); if(rows < 1) { return res; } int cols = matrix[0].size(); int start = 0; while(cols > start * 2 && rows > start * 2) { PrintMatrixInCircle(matrix,res,start); ++start; } return res; }};
阅读全文
0 0
- 【剑指offer】顺时针打印矩阵
- 剑指offer--顺时针打印矩阵
- 剑指offer--顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- 《剑指offer》顺时针打印矩阵
- 剑指offer-顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- 剑指offer-顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- [剑指offer]顺时针打印矩阵
- 《剑指offer》-顺时针打印矩阵
- 【剑指offer】顺时针打印矩阵
- 剑指offer|顺时针打印矩阵
- 《剑指offer》顺时针打印矩阵
- 剑指Offer:顺时针打印矩阵
- ns2多接口扩展错误调试
- redis常用工具介绍
- Netty源码解读(三)Channel与Pipeline
- 感知机 @ Python
- 虚函数的好处
- 剑指offer--->顺时针打印矩阵
- Android Fragment 完全解析(上)
- Json对象与Json字符串的转化、JSON字符串与Java对象的转换
- HDU 6162 主席树+LCA(树上求区间[a,b]中的个数)
- 【HDU 1800】Flying to the Mars(STL map)
- 4.5 leetcode -5 same-tree
- Android开发中Handler理解
- 微巨科技:关于使用微信卡券开展储值相关业务的说明
- Netty源码解读(四)Netty与Reactor模式