题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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.
分析思路: 输入矩阵可能是任意矩形,长宽哪一个更大不确定。 每一次输出最外圈,输出起点分别为(0,0),(1,1),(2,2)....(n,n)... 每一圈分四次输出,按顺时针方向依次为:  上边  →(row不变, col逐渐增加到最大), 右边 ↓(col不变, row逐渐增加到最大) ,下边 ←(row不变, col逐渐减小到最小),左 ↑(col不变,row逐渐减小到最小)。设置变量代表未输出的边数(row_length 和col_length), 任意一个为0就说明输出完毕。 输出的圈每次缩小,都要注意边界,不要超出取值范围。尤其注意当前所在行数和列数,以及坐标的变动。
class Solution {
public:vector<int> printMatrix(vector<vector<int> > matrix) {vector<int> result;if(matrix.empty())return result;int row_length = matrix.size();if(row_length == 1)return matrix[0];int col_length = matrix[0].size();int start_row = 0, start_col = 0;while(row_length || col_length){int current_row = start_row, current_col = start_col;       // 每一次输出一圈,开头的坐标为(0,0),(1,1)....

       // 输出上边→(row不变, col逐渐增加到最大)for(int j = 0; j < col_length; j++){result.push_back(matrix[current_row][current_col++]);}current_col--;  // 越界,通过自减恢复row_length--;   // 已经打印完一行if(!row_length) break; current_row++;  // 从右上角的坐标往下移动一格              // 输出右边 ↓(col不变, row逐渐增加到最大) for(int i = 0; i < row_length; i++){result.push_back(matrix[current_row++][current_col]);}current_row--; // 越界,恢复col_length--;  // 打印完一列if(!col_length) break;current_col--;         // 下边 ←(row不变, col逐渐减小到最小)for(int j = 0; j < col_length; j++){result.push_back(matrix[current_row][current_col--]);}current_col++;row_length--;if(!row_length) break;current_row--;       // 左 ↑(col不变,row逐渐减小到最小)for(int i = 0; i < row_length; i++){result.push_back(matrix[current_row--][current_col]);}current_row++;col_length--;if(!col_length) break;        // 下一圈起点start_row++;start_col++;}return result;}
};

转载于:https://www.cnblogs.com/heifengli/p/11260503.html

剑指offer(19): 顺时针打印矩阵相关推荐

  1. 《LeetCode力扣练习》剑指 Offer 29. 顺时针打印矩阵 Java

    <LeetCode力扣练习>剑指 Offer 29. 顺时针打印矩阵 Java 一.资源 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matr ...

  2. 【剑指offer】顺时针打印矩阵

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/26053049 剑指offer上的第20题,九度OJ上測试通过. 题目描写叙述: 输入一个矩 ...

  3. 剑指 Offer 29. 顺时针打印矩阵

    题目 剑指offer的解题思路 顺时针打印矩阵,可以分解为每次打印一个数,顺序是从左到右,从上到下,然后从右到左,从下到上. 打印每一圈的起点(startX,startY)分别为(0,0),(1,1) ...

  4. 【完整可运行代码】剑指 Offer 29. 顺时针打印矩阵

    立志用最少的代码做最高效的表达 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2, ...

  5. 打印矩阵 java_【Java】 剑指offer(29) 顺时针打印矩阵

    本文参考自<剑指offer>一书,代码采用Java语言. 题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 思路 每次打印矩阵最外面的一圈(用方法printMatrix ...

  6. 剑指offer:顺时针打印矩阵

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

  7. 剑指offer——29.顺时针打印矩阵(不熟)

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

  8. 【leetcode】剑指 Offer 29. 顺时针打印矩阵(shun-shi-zhen-da-yin-ju-zhen-lcof)(模拟)[简单]

    链接 https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/ 耗时 解题:38 min 题解:10 min 题意 输入一 ...

  9. 剑指offer 29 顺时针打印矩阵(可逆时针,任一点开始)

    原书上写的解太麻烦了,而且还没有扩展性(比如从右上角开始打印,或者逆时针打印). 此外多个for循环的起止点也让人头晕,每个方向都要单独判断步进方向,因此代码也缺少优雅性. 这里我用direction ...

最新文章

  1. 超声波测距测速升压可调中周倒车雷达变频器传感器1:10
  2. php模板技术smarty,PHP模板技术Smarty
  3. 【python】openstack管理小工具(增删查改,批量ping)
  4. HALCON标定板简介
  5. C++对类(或者结构体)中字符数组赋值时,出现表达式必须是可修改的左值的问题
  6. java软件测试方法有哪些方法有哪些方法_软件测试方法和软件测试规则
  7. 折腾Java设计模式之状态模式
  8. [模板]线性筛素数(欧拉筛法)
  9. 静态方法与实例方法的区别
  10. AnsiString用法(转)
  11. android测试工具Demo,Android 测试工具,实时抓被测app crash实现思路
  12. mysql 驱动jar包下载_mysql驱动jar包
  13. 记 * 恢复ext4硬盘的数据
  14. 大一c语言常见编程题,大一c语言考试复习题
  15. can总线配置读入是什么意思_CAN总线系列讲座第七讲——CAN总线地址设置详解
  16. HTML5 屏幕适配笔记
  17. Elasticsearch安装操作步骤
  18. 重新理解创业:一个创业者的中途思考
  19. 互联网快讯:粉笔科技双核驱动实现突围;猿辅导以科技助力教育提质增效;抖音升级谣言专项治理
  20. JavaSocket编程之Netty框架线程模型

热门文章

  1. 【机器学习入门到精通系列】推荐系统之协同过滤算法
  2. python【蓝桥杯vip练习题库】ALGO-118连续正整数的和(枚举优化)
  3. 装Linux后分区丢失,找到了linux分区顺序错乱修复方法
  4. 网络推广外包没有效果?很可能是在网络推广外包基础上出现问题!
  5. 网络营销——网络营销专员浅析网站推广营销关键词是重点
  6. 网站更新的文章如何被百度快速收录?
  7. 网站优化中能有效提升网站打开速度的技巧有哪些?
  8. irobot擦地机器人故障_iRobot擦地机器人:只会擦地并不“奢侈”
  9. ida android sign加密,最右sign-v2签名算法追踪及逆向还原
  10. 日元兑换——国内兑换需要护照和签证,国外的机场有兑换ATM