地址 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
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最新文章

  1. [EasyUI美化换肤]更换EasyUi图标
  2. mac 安装php7
  3. Angularjs中link函数参数含义小节
  4. [Tex学习笔记]写文章需要规范、需要引用到位. [LaTeX代码]
  5. 破解php-screw加密过的文件有效方法
  6. word-wrap: break-word 和 word-break: break-all 到底有啥区别?
  7. 转载: C#: Left outer joins with LINQ
  8. Eclipse用法和技巧二十八:Eclipse插件Easy Explore的今世
  9. spring boot 入门操作(二)
  10. Java集合详解4:HashMap和HashTable
  11. Python 数据分析4
  12. CSS布局 两列布局之单列定宽,单列自适应布局思路
  13. [LeetCode&amp;Python] Problem 70. Climbing Stairs
  14. The CLI moved into a separate package: webpack-cli.解决办法
  15. 安装jdk1.9后报 Error:java: 无效的源发行版: 1.9
  16. Linux中/目录扩容
  17. python的定时任务模块--schedule
  18. Java中HashMap的实现原理
  19. 初学者下载使用Python遇到的问题看它就行了
  20. RxBinding -- 官网说明

热门文章

  1. 数据库查询性能 LinqDB vs Sql查询
  2. MySQL的表定义语法
  3. JS---DOM---自定义属性引入和移除
  4. [转载]&mdash;&mdash;Automatic Tuning of Undo_retention Causes Space Problems (文档 ID 420525.1)
  5. MAC 下将libpomelo连接到cocos2d-x
  6. 通过BGP实现流量劫持
  7. centos7 链路聚合+KVM桥接连网
  8. 《移动WEB前端高级开发实践@www.java1234.com》——3
  9. C++之指针和引用
  10. ubuntu 安装谷歌浏览器