剑指offer-顺时针打印矩阵
时间:2021-07-28
本文章向大家介绍剑指offer-顺时针打印矩阵,主要包括剑指offer-顺时针打印矩阵使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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]
求解思路:
- 根据宽度和高度确定打印的圈数(注意奇偶)
- 每一圈分上右下左四条边打印(注意开闭区间)
- 打印剩下的一行或一列
代码
1 class Solution { 2 public: 3 vector<int> printMatrix(vector<vector<int> > matrix) { 4 // 取宽和高的最小值确定圈数 5 // 每一圈从上右下左遍历,关键词:i n-i-1,开区间 6 int row=matrix.size(); 7 int col=matrix[0].size(); 8 int n=min(row,col); 9 // 如果最小值是计数的话,注意最后一圈只有一个数 10 int circle_num=n%2==0?n/2:(n-1)/2; // 考虑奇偶 11 vector<int> res; 12 int i=0; 13 for(;i<circle_num;++i){ 14 for(int j=i;j<col-i-1;++j){ // 列数才代表一行的长度 15 res.push_back(matrix[i][j]); 16 } 17 for(int j=i;j<row-i-1;++j){ // 行数才代表一列的长度 18 res.push_back(matrix[j][col-i-1]); 19 } 20 for(int j=col-i-1;j>i;--j){ 21 res.push_back(matrix[row-i-1][j]); 22 } 23 for(int j=row-i-1;j>i;--j){ 24 res.push_back(matrix[j][i]); 25 } 26 } 27 // 如果是奇数,就还得考虑追加一行或一列的情况 28 if(n%2!=0){ 29 if(row>=col){ // 追加行 30 for(int j=i;j<row-i;++j){ 31 res.push_back(matrix[j][i]); 32 } 33 }else{ // 追加列 34 for(int j=i;j<col-i;++j){ 35 res.push_back(matrix[i][j]); 36 } 37 } 38 } 39 return res; 40 } 41 };
心之所愿,永不相忘
原文地址:https://www.cnblogs.com/zgll/p/15072072.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- MySQL information_schema详解 COLLATION_CHARACTER_SET_APPLICABILITY
- 如何处理Angular项目在Visual Studio Code打开报关于@Decorators的警告信息
- QT 中普通数值与字符串之间的转换
- C# 时间与时间戳互转 13位
- 在C#中ref和out具体怎么使用?在什么情况下使用?
- Vs code 创建vue模版
- [892]python中re.split()方法
- MacOS抓包工具Charles
- PYTHON替代MATLAB在线性代数学习中的应用(使用Python辅助MIT 18.06 Linear Algebra学习)
- C# TCP/IP 文件(图片、视频等)收发系统
- 反制面试官 | 14张原理图 | 再也不怕被问 volatile!
- Javascript之其实我觉得原型链没有难的那么夸张!
- 归纳一下:C#线程同步的几种方法
- C# 主界面的扁平化
- C# LINQ