博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer 顺时针打印矩阵
阅读量:5163 次
发布时间:2019-06-13

本文共 1947 字,大约阅读时间需要 6 分钟。

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.
思路:一定要记住循环继续的条件是columns > start * 2,rows > start * 2;
一圈的打印分为四步:
第一步:无条件打印第一行,从左往右;
第二步:终止行号大于起始行号,打印最后一列,从上往下;
第三步:至少有两行两列才能进行打印,要求起始行号小于终止行号,起始列号小于终止列号,从左往右打印。
第四步:至少需要三行两列才能进行打印,终止行号比起始行号至少大2,终止列号大于起始列号。
 
分为两个函数,一个函数实现打印一圈的功能,另一个函数实现主循环。
1 class Solution { 2 public: 3     void printfCircle(vector
> matrix,vector
& result,int start,int rows,int columns){ 4 int endRows = rows - start - 1; 5 int endColumns = columns - start - 1; 6 //打印第一行 7 for(int i = start;i <= endColumns;++i){ 8 result.push_back(matrix[start][i]); 9 }10 //打印最后一列11 if(start < endRows){12 for(int i = start + 1;i <= endRows;++i){13 result.push_back(matrix[i][endColumns]);14 }15 }16 //打印最后一行17 if(start < endRows && start < endColumns){18 for(int i = endColumns - 1;i >= start;--i){19 result.push_back(matrix[endRows][i]);20 }21 }22 //打印第一列23 if(start < endRows - 1 && start < endColumns){24 for(int i = endRows - 1;i >= start + 1;--i){25 result.push_back(matrix[i][start]);26 }27 }28 }29 vector
printMatrix(vector
> matrix) {30 vector
result;31 if(matrix.empty()){32 return {};33 }34 if(matrix[0].empty()){35 return {};36 }37 int start = 0;38 int rows = matrix.size(),columns = matrix[0].size();39 while(rows > 2*start && columns > 2*start){40 printfCircle(matrix,result,start,rows,columns);41 ++start;42 }43 return result;44 }45 };

 

 
 

转载于:https://www.cnblogs.com/dingxiaoqiang/p/7468309.html

你可能感兴趣的文章
邻接矩阵c源码(构造邻接矩阵,深度优先遍历,广度优先遍历,最小生成树prim,kruskal算法)...
查看>>
ubuntu 如何进行文件、夹删除等操作
查看>>
JAVA多线程详解
查看>>
Jmeter(七)Mongodb的增删改查
查看>>
[JavaScript] Use `+` opertor to add one string and one number
查看>>
vue实例中中data属性三种写法
查看>>
uva1636 - Headshot(条件概率)
查看>>
iOS开发 runtime实现原理以及实际开发中的应用
查看>>
关于Mybatis 的 Mapped Statements collection does not contain value for 异常 解决方案
查看>>
第五十五天 how can I 坚持
查看>>
【Oracle】oracle11g安装过程提示swap size 检查失败问题
查看>>
Ogre参考手册(二)3.1.1-3.1.2 材质、技术、通道
查看>>
eclipse 全局替换
查看>>
GiFResizer 图片压缩
查看>>
CKFinder 弹出窗口操作并设置回调函数
查看>>
查询当天、本周、本月记录
查看>>
ABAP学习之旅——多种方式建立模块化功能
查看>>
Android 音频的播放之二MediaPlayer
查看>>
leetCode(38):Lowest Common Ancestor of a Binary Search Tree
查看>>
PixelUtils:像素转换工具
查看>>