Acwing40. 顺时针打印矩阵
2024-08-24 19:18:35
地址 https://www.acwing.com/solution/acwing/content/3623/
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
样例
输入:
[
[, , , ],
[, , , ],
[,,,]
] 输出:[,,,,,,,,,,,]
算法1
顺时针 就是按照右 下 左 上 次序依次打印
并且建立同matrix同样大小的二维数组 记录该点是否已经访问 如果访问了则不能再进
在依次打印的过程中,如果遇到坐标不符合标准则右转90度,继续打印,直到一步都不能走了 则退出循环
C++ 代码
class Solution {
public:
vector<int> result;
vector<vector<bool>> matrixFlag;
int upd = ; int downd = ; int leftd = ; int rightd = ;
int movex[] = { -,,, };
int movey[] = { ,,-, }; bool PrintInner(int& x, int& y, const vector<vector<int> >& matrix,int direct)
{
if (x < || y < || x >= matrix.size() || y >= matrix[].size())
return false;
if (matrixFlag[x][y] == false)
return false;
int xcopy = x; int ycopy = y;
while (ycopy >= && xcopy >= && xcopy < matrix.size() && ycopy < matrix[].size() && matrixFlag[xcopy][ycopy] == true) {
result.push_back(matrix[xcopy][ycopy]);
matrixFlag[xcopy][ycopy] = false;
y = ycopy; x = xcopy;
xcopy += movex[direct];
ycopy += movey[direct];
} return true;
} vector<int> printMatrix(vector<vector<int> > matrix) {
if (matrix.empty() || matrix[].empty()) return result;
int n = matrix.size();
int m = matrix[].size(); matrixFlag = vector<vector<bool>>(n,vector<bool>(m,true));
int x = ; int y = ; while () {
if (PrintInner(x, y, matrix, rightd) == false) break;
x += movex[downd]; y += movey[downd]; if (PrintInner(x, y, matrix, downd) == false) break;
x += movex[leftd]; y += movey[leftd]; if (PrintInner(x, y, matrix, leftd) == false) break;
x += movex[upd]; y += movey[upd]; if (PrintInner(x, y, matrix, upd) == false) break;
x += movex[rightd]; y += movey[rightd];
}
return result;
}
}; 作者:defddr
链接:https://www.acwing.com/solution/acwing/content/3623/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
最新文章
- [EasyUI美化换肤]更换EasyUi图标
- mac 安装php7
- Angularjs中link函数参数含义小节
- [Tex学习笔记]写文章需要规范、需要引用到位. [LaTeX代码]
- 破解php-screw加密过的文件有效方法
- word-wrap: break-word 和 word-break: break-all 到底有啥区别?
- 转载: C#: Left outer joins with LINQ
- Eclipse用法和技巧二十八:Eclipse插件Easy Explore的今世
- spring boot 入门操作(二)
- Java集合详解4:HashMap和HashTable
- Python 数据分析4
- CSS布局 两列布局之单列定宽,单列自适应布局思路
- [LeetCode&;Python] Problem 70. Climbing Stairs
- The CLI moved into a separate package: webpack-cli.解决办法
- 安装jdk1.9后报 Error:java: 无效的源发行版: 1.9
- Linux中/目录扩容
- python的定时任务模块--schedule
- Java中HashMap的实现原理
- 初学者下载使用Python遇到的问题看它就行了
- RxBinding -- 官网说明
热门文章
- 数据库查询性能 LinqDB vs Sql查询
- MySQL的表定义语法
- JS---DOM---自定义属性引入和移除
- [转载]&mdash;&mdash;Automatic Tuning of Undo_retention Causes Space Problems (文档 ID 420525.1)
- MAC 下将libpomelo连接到cocos2d-x
- 通过BGP实现流量劫持
- centos7 链路聚合+KVM桥接连网
- 《移动WEB前端高级开发实践@www.java1234.com》——3
- C++之指针和引用
- ubuntu 安装谷歌浏览器