【剑指offer】面试题20:顺时针打印矩阵
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:
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.
思路:
这里没有使用书上的方法,而是维护一个二维坐标的最小最大值。假设横轴向左为x正方向,竖轴向下为y正方向,则依次从左到右、从上到下、从右到做、从下到上输出一个圈。能形成一个圈的条件是minx<maxx && miny<maxy。当此条件不满足时,分情况讨论打印出来即可。
写代码时需要注意的地方:
1.该坐标系下,x是列、y是行,所以取值时应该是matrix[y][x],而不是matrix[x][y];同理初始化maxx和maxy时,需要注意matrix[0].size()和matrix.size()
2.入口处参数判断。不要忘了这一点,其次,对于vector,不是判断它是不是等于NULL。。。同理返回值也不是返回NULL,而是空容器。
3.形成一个圈时,最后一个循环的判断条件,和前面三个稍微有些不同,注意下。
总结:
所以看到一个题之后,还是应该自己先想想,看自己想的话思路是怎样,然后再看答案。书上答案看得差不多懂了,还是感觉写起来有点麻烦,可能是因为不是自己的思路。自己的思路写出来也是对的,好像也挺简洁的。
class Solution { public:vector<int> printMatrix(vector<vector<int> > matrix) {vector<int> res;//if(matrix==NULL || matrix.size()<=0 || matrix[0].size()<=0) return NULL;if(matrix.size()<=0 || matrix[0].size()<=0) return res;int minx=0,miny=0;int maxx=matrix[0].size()-1;int maxy=matrix.size()-1;while(minx<maxx && miny<maxy){for(int x=minx;x<=maxx;++x){//res.push_back(x);//res.push_back(miny);//res.push_back(matrix[x][miny]); 晕死,所有的坐标都弄错了 res.push_back(matrix[miny][x]);}for(int y=miny+1;y<=maxy;++y){res.push_back(matrix[y][maxx]);}for(int x=maxx-1;x>=minx;--x){res.push_back(matrix[maxy][x]);}for(int y=maxy-1;y>=miny+1;--y)//条件是>=,不是<= 而且比较的数是miny+1,不是miny {res.push_back(matrix[y][minx]);}minx++;maxx--;miny++;maxy--;}if(minx==maxx){if(miny==maxy){res.push_back(matrix[miny][minx]);}else{for(int y=miny;y<=maxy;++y){res.push_back(matrix[y][minx]);}}}else if(miny==maxy){for(int x=minx;x<=maxx;++x){res.push_back(matrix[miny][x]);}}return res;} };
转载于:https://www.cnblogs.com/buxizhizhou/p/4703343.html
【剑指offer】面试题20:顺时针打印矩阵相关推荐
- 剑指offer面试题[20]-顺时针打印矩阵
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2, ...
- 剑指offer面试题29. 顺时针打印矩阵(边界问题)
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 思路 详见链接 代码 class Solution:def spiralOrder(self, matrix:[[int]]) ...
- 剑指offer十九之顺时针打印矩阵
一.题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2, ...
- 【剑指offer-Java版】20顺时针打印矩阵
顺时针打印矩阵:重在理解,毕竟作者分析的那个方法看起来还是蛮复杂的-所以自己写了个接地气的方法 重在逻辑的一个题,一次性完全写对还是比较困难的 public class _Q20 {public vo ...
- java程序输出88的0 1矩阵_《剑指Offer》Java实现--顺时针打印矩阵
题目描述 输入一个矩阵,按照从外向里顺时针的顺序打印出每一个数字.测试用例如下图: 测试数组 思路分析 这道题目并不难,关键在于边界控制!每一层遍历均从左上角开始,逐层往里完成遍历. Java代码实现 ...
- 剑指offer(19)顺时针打印矩阵
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2, ...
- 剑指offer——面试题20:顺时针打印矩阵
剑指offer--面试题20:顺时针打印矩阵 Solution1: 可参考leetCode 54题的解法 书上的思路特别好,学习之~ class Solution { public:vector< ...
- (补充)【打印1到最大的n位数】剑指offer——面试题12:打印1到最大的n位数
剑指offer--面试题12:打印1到最大的n位数 此题在牛客网上没有OnlineJudge,在此补充两种做法. 参考网址:https://blog.csdn.net/yanxiaolx/articl ...
- java 打印_剑指Offer面试题20(Java版):顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字.例如:如果输入如下矩阵: 1,2,3,4 5,6,7,8 9,10,11,12 13,14,15,16 则依次打印出数字1,2,3, ...
- 剑指offer-面试题20.顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字.例如: 输入一个矩阵如下: 1 1 2 3 4 2 5 6 7 8 3 9 10 11 12 4 13 14 15 16 则依次打印 ...
最新文章
- windows不能在启动oracle,Windows不能在当地电脑启动OracleDBConsoleorcl
- 并发编程-04线程安全性之原子性Atomic包的4种类型详解
- JQuery学习系列(九)AJAX
- 【Python教程】常见字符串去除空格的教程
- 使用变量_在 Linux 中使用变量 | Linux 中国
- 网络安全公司奇安信集团是如何基于 Flink 构建 CEP 引擎实时检测网络攻击【未来不可忽视的网络安全】
- 计算机在盲童音乐教学中的具体应用,计算机在高校中的具体应用
- canvas 实现刮刮乐
- python字符串左_Python去除字符串左边指定字符
- 使用服务器代替雷达信号处理,雷达数字信号处理解决方案
- 怎么控制人物行走动画与移动
- 笔记本打印机显示服务器脱机,打印机显示脱机状态怎么办 打印机显示脱机状态解决方法【详解】...
- win10计算机管理器端口号,Win10设备管理器没有端口选项的解决方法
- 【Linux】Linux私有组,主要组和附加组
- html iframe自动高度,iframe高度自适应撑开
- 收不到验证码怎么办?
- 综述:用于可靠的fMRI测量的策略
- 允许网站使用相机和麦克风_通过浏览器获取麦克风或相机等媒体的使用权限
- 在OLED12864竟然也能玩Chrome 小恐龙跳一跳的游戏?附所有软硬件资料【全开源】
- JAVA/Python/PHP/go语言/区块链/大数据/人像修图等视频学习资料
热门文章
- Eclipse 格式化代码时不换行与自动换行WordWrap插件
- 关闭流时,抛出异常:java.io.IOException: Stream Closed
- LeetCode简单题目(#53 #58 #66 #67 #69 #70 #83 #88)-8道
- mysql 单向自动同步_mysql单向自动同步
- [转载] 蓝胡子国王的金钥匙
- 编译GDAL使用最新的HDF库配置文件
- 移动端前端UI框架推荐
- KUBERNETES存储之PERSISTENT VOLUMES简介
- 关于 cocos2d-x win32 版本的 cpu 占用改良
- 拼包函数及网络封包的异常处理