【剑指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;}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝持续低烧流鼻涕怎么办 孩子鼻塞不通气怎么办 2月婴儿感冒怎么办 长期流黄鼻涕怎么办 孩子流清水鼻涕怎么办 小孩有点流鼻子怎么办 初生婴儿堵鼻子怎么办? 小孩反复发烧了怎么办 小孩突然发烧了怎么办 40天宝宝鼻塞怎么办 宝宝伤风鼻子不通怎么办 鼻子伤风不通气怎么办 宝宝伤风流鼻子怎么办 十个月婴儿上火怎么办 一个多月宝宝鼻子有鼻屎怎么办 三个月婴儿感冒发烧怎么办 小孩感冒发烧流鼻涕怎么办 小孩感冒发烧反反复复怎么办 宝宝反复发烧39怎么办 一岁婴儿流鼻涕怎么办 四岁宝宝发烧怎么办 小孩流清鼻涕怎么办? 5宝宝光流清鼻涕怎么办 孩子一直流鼻子怎么办 10岁天天流鼻涕怎么办 喉咙痛又痒咳嗽怎么办 60天宝宝流鼻涕怎么办 宝宝流鼻子严重怎么办 鼻炎鼻涕多鼻塞怎么办 夏天老人感冒流鼻涕怎么办 鼻窦炎流清鼻涕怎么办 鼻子有脓鼻涕怎么办 宝宝有脓鼻涕怎么办 小孩脓鼻涕咳嗽怎么办 哺乳期流黄鼻涕怎么办 宝宝鼻塞流脓涕怎么办 喉咙痛浓痰咳嗽怎么办 哺乳期留清鼻涕怎么办 哺乳期就清鼻涕怎么办 小金毛流脓鼻涕怎么办 鼻炎有浓鼻涕怎么办