【剑指offer】顺时针打印矩阵
来源:互联网 发布:json xml 比较 编辑:程序博客网 时间:2024/06/17 20:50
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
例如:如果输入如下矩阵
12345678910111213141516
则依次打印出数字:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
分析:做这道题需要我们缜密的逻辑思维,只要我们细心点都是可以做出来的。我的做题思路是首先要确定需要多少趟循环遍历,每一趟遍历是矩阵顺时针遍历一圈(或一行/一列),而每一趟的遍历的起始位置依次是(0,0),(1,1)...确定了每一趟的起始位置及次数,接下来就是写循环体了,顺序依次是从左到右、从上到下、从右到左、从下到上。改变每趟遍历顺序时注意好起始位置就没什么大问题了,程序如下:
vector<int> printMatrix(vector<vector<int> > matrix) { vector<int> res; if(matrix.empty()) return res; int m=matrix.size(),n=matrix[0].size(),t=0,s=m*n,k; //s是容器数组的元素个数,k=min(m,n)-1; //k是遍历的趟数; if(k==0) k=1; while(t<k){ int i=t,j=t; //i,j分别是每趟遍历的初始横纵坐标; while(j<n) res.push_back(matrix[i][j++]); if(s==res.size()) break; j--;i++; while(i<m) res.push_back(matrix[i++][j]); if(s==res.size()) break; i--;j--; while(j>=t) res.push_back(matrix[i][j--]); if(s==res.size()) break; j++;i--; while(i>t) res.push_back(matrix[i--][j]); if(s==res.size()) break; t++; n--;m--; } return res;}
阅读全文
0 0
- 【剑指offer】顺时针打印矩阵
- 剑指offer--顺时针打印矩阵
- 剑指offer--顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- 《剑指offer》顺时针打印矩阵
- 剑指offer-顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- 剑指offer-顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- [剑指offer]顺时针打印矩阵
- 《剑指offer》-顺时针打印矩阵
- 【剑指offer】顺时针打印矩阵
- 剑指offer|顺时针打印矩阵
- 《剑指offer》顺时针打印矩阵
- 剑指Offer:顺时针打印矩阵
- JVM性能调优监控工具
- C#判断字符串是否为纯数字(转)
- linux Android 编译环境搭建
- oracle中游标详细用法
- 常用keycode
- 【剑指offer】顺时针打印矩阵
- 简述xcode经常报的经典error及解决办法
- java 内存泄漏
- ip变动通知
- 远程访问mysql,如何保证其安全
- 一位大牛整理的Python资源
- http请求流程图
- MaxCompute( 原ODPS)下的表分区解释
- Java中的多线程