题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:

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:顺时针打印矩阵相关推荐

  1. 剑指offer面试题[20]-顺时针打印矩阵

    题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2, ...

  2. 剑指offer面试题29. 顺时针打印矩阵(边界问题)

    题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 思路 详见链接 代码 class Solution:def spiralOrder(self, matrix:[[int]]) ...

  3. 剑指offer十九之顺时针打印矩阵

    一.题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2, ...

  4. 【剑指offer-Java版】20顺时针打印矩阵

    顺时针打印矩阵:重在理解,毕竟作者分析的那个方法看起来还是蛮复杂的-所以自己写了个接地气的方法 重在逻辑的一个题,一次性完全写对还是比较困难的 public class _Q20 {public vo ...

  5. java程序输出88的0 1矩阵_《剑指Offer》Java实现--顺时针打印矩阵

    题目描述 输入一个矩阵,按照从外向里顺时针的顺序打印出每一个数字.测试用例如下图: 测试数组 思路分析 这道题目并不难,关键在于边界控制!每一层遍历均从左上角开始,逐层往里完成遍历. Java代码实现 ...

  6. 剑指offer(19)顺时针打印矩阵

    题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2, ...

  7. 剑指offer——面试题20:顺时针打印矩阵

    剑指offer--面试题20:顺时针打印矩阵 Solution1: 可参考leetCode 54题的解法 书上的思路特别好,学习之~ class Solution { public:vector< ...

  8. (补充)【打印1到最大的n位数】剑指offer——面试题12:打印1到最大的n位数

    剑指offer--面试题12:打印1到最大的n位数 此题在牛客网上没有OnlineJudge,在此补充两种做法. 参考网址:https://blog.csdn.net/yanxiaolx/articl ...

  9. java 打印_剑指Offer面试题20(Java版):顺时针打印矩阵

    题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字.例如:如果输入如下矩阵: 1,2,3,4 5,6,7,8 9,10,11,12 13,14,15,16 则依次打印出数字1,2,3, ...

  10. 剑指offer-面试题20.顺时针打印矩阵

    题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字.例如: 输入一个矩阵如下: 1 1 2 3 4 2 5 6 7 8 3 9 10 11 12 4 13 14 15 16 则依次打印 ...

最新文章

  1. windows不能在启动oracle,Windows不能在当地电脑启动OracleDBConsoleorcl
  2. 并发编程-04线程安全性之原子性Atomic包的4种类型详解
  3. JQuery学习系列(九)AJAX
  4. 【Python教程】常见字符串去除空格的教程
  5. 使用变量_在 Linux 中使用变量 | Linux 中国
  6. 网络安全公司奇安信集团是如何基于 Flink 构建 CEP 引擎实时检测网络攻击【未来不可忽视的网络安全】
  7. 计算机在盲童音乐教学中的具体应用,计算机在高校中的具体应用
  8. canvas 实现刮刮乐
  9. python字符串左_Python去除字符串左边指定字符
  10. 使用服务器代替雷达信号处理,雷达数字信号处理解决方案
  11. 怎么控制人物行走动画与移动
  12. 笔记本打印机显示服务器脱机,打印机显示脱机状态怎么办 打印机显示脱机状态解决方法【详解】...
  13. win10计算机管理器端口号,Win10设备管理器没有端口选项的解决方法
  14. 【Linux】Linux私有组,主要组和附加组
  15. html iframe自动高度,iframe高度自适应撑开
  16. 收不到验证码怎么办?
  17. 综述:用于可靠的fMRI测量的策略
  18. 允许网站使用相机和麦克风_通过浏览器获取麦克风或相机等媒体的使用权限
  19. 在OLED12864竟然也能玩Chrome 小恐龙跳一跳的游戏?附所有软硬件资料【全开源】
  20. JAVA/Python/PHP/go语言/区块链/大数据/人像修图等视频学习资料

热门文章

  1. Eclipse 格式化代码时不换行与自动换行WordWrap插件
  2. 关闭流时,抛出异常:java.io.IOException: Stream Closed
  3. LeetCode简单题目(#53 #58 #66 #67 #69 #70 #83 #88)-8道
  4. mysql 单向自动同步_mysql单向自动同步
  5. [转载] 蓝胡子国王的金钥匙
  6. 编译GDAL使用最新的HDF库配置文件
  7. 移动端前端UI框架推荐
  8. KUBERNETES存储之PERSISTENT VOLUMES简介
  9. 关于 cocos2d-x win32 版本的 cpu 占用改良
  10. 拼包函数及网络封包的异常处理