面试题20:顺时针打印矩阵
来源:互联网 发布:淘宝食品类别名称 编辑:程序博客网 时间:2024/05/16 11:26
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每个数字。
这个问题之前在leecode上也碰到过,当时有人写了一种挺好的方法,借助于游戏设置上下左右的方法,具体有点不记得了。这道题看上去简单,但是写起来不容易,各种情况,开始很难考虑全,先写书上提到的方法吧。
class Solution {public: vector<int> printMatrix(vector<vector<int> > matrix) { vector<int> vect; if(matrix.size()==0) return vect; int rows=matrix.size(); int cols=matrix[0].size(); printMatrix1(vect,matrix,rows,cols); return vect; } void printMatrix1(vector<int> &vect,vector<vector<int> > &matrix,int rows,int cols) { int start=0; while(rows>2*start&&cols>start*2) { printMatrix2(vect,matrix,rows,cols,start); start++; } } void printMatrix2(vector<int> &vect,vector<vector<int> > &nums,int rows,int cols,int start) { int xmax=cols-1-start; int ymax=rows-1-start; int i,number; for(i=start;i<=xmax;i++) { number=nums[start][i]; vect.push_back(number); } if(ymax>start) { for(i=start+1;i<=ymax;i++) { number=nums[i][xmax]; vect.push_back(number); } } if(start<xmax&&start<ymax) { for(i=xmax-1;i>=start;i--) { number=nums[ymax][i]; vect.push_back(number); } } if(start<xmax&&start<ymax-1) { for(i=ymax-1;i>start;i--) { number=nums[i][start]; vect.push_back(number); } } } };对于每次打印一圈,有必要说明一下。第一行肯定是要打印的。然后在最右边,从上往下打印的条件是终止行号大于起始行号(也就是至少两行),此时才从上往下打印。第三步是至少有两行两列,此时才能有返回行的打印。同理,第四步条件是终止行比起始行大2,同时终止列大于起始列。
0 0
- 面试题20:顺时针打印矩阵 ***
- 面试题20 顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20顺时针打印矩阵
- 面试题20顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20顺时针打印矩阵
- 【面试题20】顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题 20: 顺时针打印矩阵
- 剑指offer面试题20顺时针打印矩阵
- Android数据库查询操作的一次粗心费时
- 数据结构——c语言描述 第五章 (1) 特殊矩阵的压缩存储
- synchronized的使用方法
- xcode项目更改名字
- github遇到问题
- 面试题20:顺时针打印矩阵
- myeclipse不编译的问题
- JS正则表达式验证账号、手机号、电话和邮箱
- 想转行做运营人?这些事 你要知道
- [iOS 禁用第三方输入法] 禁用第三方输入法+ExtensionPointIdentifier理解
- pat-到底有多二
- CentOS7下解决yum install mysql-server没有可用包的问题
- 对比:冒泡算法和选择算法
- Android自定义View之一:初探实例