Acwing40. 顺时针打印矩阵
地址 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
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Acwing40. 顺时针打印矩阵的更多相关文章
- 【剑指offer】顺时针打印矩阵
转载请注明出处:http://blog.csdn.net/ns_code/article/details/26053049 剑指offer上的第20题,九度OJ上測试通过. 题目描写叙述: 输入一个矩 ...
- php笔试算法题:顺时针打印矩阵坐标-蛇形算法
这几天参加面试,本来笔试比较简单,但是在面试的时候,技术面试官说让我现场写一个算法,顺时针打印矩阵的坐标,如图所示 顺序为,0,1,2,3,4,9,14,19,24,23,22,21,20,15,10 ...
- 《剑指offer》— JavaScript(19)顺时针打印矩阵
顺时针打印矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打 ...
- [PHP] 算法-顺时针打印矩阵的PHP实现
1.行数和列数取出来row,col,圈数就是 (较小值-1)/2+1 2.外层循环控制圈数,内层四个for循环,i 3.第一个for循环,从左到右,j=i;j<col-i;j++;j<; ...
- 《剑指offer》顺时针打印矩阵
本题来自<剑指offer> 顺时针打印矩阵 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 1 ...
- 剑指offer十九之顺时针打印矩阵
一.题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2, ...
- 《剑指offer》第二十九题(顺时针打印矩阵)
// 面试题29:顺时针打印矩阵 // 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. #include <iostream> void PrintMatrixInC ...
- 【剑指offer】面试题 29. 顺时针打印矩阵
面试题 29. 顺时针打印矩阵 题目描述 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- 剑指Offer - 九度1391 - 顺时针打印矩阵
剑指Offer - 九度1391 - 顺时针打印矩阵2013-11-24 04:55 题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 ...
随机推荐
- WPF 后台模拟界面触摸点击
win32Api提供一种方法,模拟用户触摸点击 InjectTouchInput function InitializeTouchInjection InjectTouchInput 在模拟添加触摸输 ...
- C#深入浅出之操作符和控制流程
操作符 操作符简单举例就是生活中的+-*/等等运算符号,下面会详细讨论运算符内容. 一元正负操作符 有时候需要改变数值的正负号.一元操作符(-)可以使得数字的正负号改变. 例如:int a = -11 ...
- [转]Python十个高大上的语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手.不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了.本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并 ...
- Mac Pro 2017款自带php与用brew重装PHP后的地址
mac pro 2017款自带PHP与apache位置: [apache]apache配置文件 :/etc/apache2/httpd.confDocumentRoot : /Library/WebS ...
- Linux中jar包启动和jar包后台运行
Linux 运行jar包命令如下: 方式一: java -jar shareniu.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? ...
- java 监听文件或文件夹变化
今天遇到一个新需求,当从服务器下载文件后用指定的本地程序打开,不知道何时文件下载完成,只能考虑监听文件夹,当有新文件创建的时候打开指定程序. 在此给出一个完整的下载和打开过程: 1.下载文件 jsp页 ...
- [Go] 实现websocket服务端
直接使用官方子包可以实现websocket协议, golang.org/x/net/websocket 如果在这个目录没有这个包就去github下载net库,放进这个目录$GOPATH/src/gol ...
- java之关键字static
static简单概述 static 关键字的基本使用,它可以用来修饰的成员变量和成员方法,一旦用了static关键字修饰,那么这样的内容不再属于对象而是属于类,凡是本类的对象都共享使用同一份.我们可以 ...
- Redis与Redis 伪集群环境的搭建
一 .准备工作 GCC编译环境 ruby运行环境 安装ruby脚本运行包 二.环境安装 1.GCC环境 首先,因为redis是由C语言编写的,所以需要安装GCC环境,可以用 gcc -v 命令来检查是 ...
- 多个线程运行MR程序时hadoop出现的问题
夜间多个任务同时并行,总有几个随机性有任务失败,查看日志: cat -n ads_channel.log |grep "Caused by" Caused by: java.uti ...