顺时针打印矩阵
来源:互联网 发布:python地址薄程序 编辑:程序博客网 时间:2024/06/02 03:30
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.
注意:分析每一步打印的前提条件。第一步总是需要的,因为打印一圈至少有一步。如果只有一行,那就不用第二步了。也就是需要第二步的前提条件是终止行号大于起始行号。需要第三步打印的前提条件是圈内至少有两行两列,也就是说除了要求终止行号大于外,还要求终止列号大于起止列号。同理,需要打印第四步的前提条件是至少有三行两列,因此要求终止行号比起始行号至少大2,同时终止列号大于起止列号。
C++ Code
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class Solution
{
public:
void PrintCircle(vector<vector<int> > &matrixmatrix, int clos, int rows, int start, vector<int> &res)
{
int endX = clos - 1 - start;
int endY = rows - 1 - start;
{
public:
void PrintCircle(vector<vector<int> > &matrixmatrix, int clos, int rows, int start, vector<int> &res)
{
int endX = clos - 1 - start;
int endY = rows - 1 - start;
//从左到右打印第一行
for (int i = start; i <= endX; i++)
{
int number = matrixmatrix[start][i];
res.push_back(number);
}
for (int i = start; i <= endX; i++)
{
int number = matrixmatrix[start][i];
res.push_back(number);
}
//从上到下打印一列
if (start < endY)
{
for (int i = start + 1; i <= endY; ++i)
{
int number = matrixmatrix[i][endX];
res.push_back(number);
}
}
if (start < endY)
{
for (int i = start + 1; i <= endY; ++i)
{
int number = matrixmatrix[i][endX];
res.push_back(number);
}
}
//从右到左打印一行
if (start < endX && start < endY)
{
for (int i = endX - 1; i >= start; --i)
{
int number = matrixmatrix[endY][i];
res.push_back(number);
}
}
if (start < endX && start < endY)
{
for (int i = endX - 1; i >= start; --i)
{
int number = matrixmatrix[endY][i];
res.push_back(number);
}
}
//从下到上打印一列
if (start < endX && start < endY - 1)
{
for (int i = endY - 1; i >= start + 1; --i)
{
int number = matrixmatrix[i][start];
res.push_back(number);
}
}
}
vector<int> printMatrix(vector<vector<int> > matrix)
{
int rows = matrix.size();//行数
int clos = matrix[0].size();//列数
vector<int> res;
if (matrix.size() == 0 || clos == 0 || rows == 0) return res;
int start = 0;
while (clos > start * 2 && rows > start * 2)//让循环继续的条件
{
PrintCircle(matrix, clos, rows, start, res);
++start;
}
return res;
}
};
if (start < endX && start < endY - 1)
{
for (int i = endY - 1; i >= start + 1; --i)
{
int number = matrixmatrix[i][start];
res.push_back(number);
}
}
}
vector<int> printMatrix(vector<vector<int> > matrix)
{
int rows = matrix.size();//行数
int clos = matrix[0].size();//列数
vector<int> res;
if (matrix.size() == 0 || clos == 0 || rows == 0) return res;
int start = 0;
while (clos > start * 2 && rows > start * 2)//让循环继续的条件
{
PrintCircle(matrix, clos, rows, start, res);
++start;
}
return res;
}
};
阅读全文
0 0
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 矩阵顺时针打印
- 顺时针打印矩阵
- 顺时针打印矩阵[算法]
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 用Scala模拟Spark集群启动过程
- ubuntu下使用pycharm调用Hanlp自然语言处理包
- 集训第十五天(2017/8/14):单调队列&单调栈
- hdu 1874 畅通工程续 (Floyd和Dijkstra)
- 图解HTTP学习笔记一
- 顺时针打印矩阵
- Guard Ports源码发布
- TCP和UDP原理
- Bone Collector
- 阿里字体图标使用方法——unicode引用
- 模拟实现strlen,strcpy,strcat
- 如何设置免密登陆
- Mybatis第九篇【基于Maven在Idea下Mybatis逆向工程】
- rgw bucket index max shards设置