剑指offer:顺时针打印矩阵
2015-11-17 11:44
417 查看
题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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
这道题如果跟着每个数字一个一个打印将会很麻烦,下标的频繁变换肯定会把自己绕晕,其实这道题有个相对简单一些的方法,就像剥洋葱一样(就叫它“剥洋葱法”吧),在这里把矩阵看成一个洋葱,当把洋葱的最外层皮剥掉以后,只需要把手指往里移即可,体现在程序里就是把边界条件往里收缩,然后剥下一层,方法还是跟剥第一层一样。class Solution { public: vector<int> printMatrix(vector<vector<int> > matrix) { vector<int> res; int r = matrix.size(), c = matrix[0].size(); // if(r == 1 && c == 1) // { // res.push_back(matrix[0][0]); // return res; // } int i_start = 0, j_start = 0, i_end = r - 1, j_end = c - 1; while(i_start <= i_end && j_start <= j_end) { // if(i_start == i_end && j_start == j_end) // res.push_back(matrix[i_start][j_start]); //else {int j = j_start; for(; j <= j_end; j++) { res.push_back(matrix[i_start][j]); } if(i_start == i_end) break; res.pop_back(); int i = i_start; for(; i <= i_end; i++) { res.push_back(matrix[i][j_end]); } if(j_start == j_end) break; res.pop_back(); for(j = j_end; j >= j_start; j--) { res.push_back(matrix[i_end][j]); } res.pop_back(); for(i = i_end; i > i_start; i--) { res.push_back(matrix[i][j_start]); }} i_start++; j_start++; i_end--; j_end--; } return res; } };
相关文章推荐
- js post方式打开新窗口
- jquery animate动画页面内滚动
- HTML5 中canvas支持触摸屏的签名面板
- CSS3实现时间表
- CSS3制作404立体字体
- JQuery 学习,翻译练习
- CSS学习<3>
- 10个精选的颜色选择器Javascript脚本及其jQuery插件
- 10个精选的颜色选择器Javascript脚本及其jQuery插件
- 面向对象的JS(一)
- css3编写导航栏
- bootstrap2.0与3.0的区别
- 用nodejs搭建一个简单的服务监听程序
- jQueryMobile快速入门
- prototype.js简介
- javaScript输出
- 剑指offer:包含min函数的栈
- javascript_DOM 编程艺术学习笔记(一)
- bootStrap 设置鼠标滑过背景颜色
- 深入理解 AngularJS 的 Scope