顺时针打印矩阵
2016-06-18 10:45
316 查看
题目:顺时针打印矩阵
思路:在写代码前一定要考虑几种比较特殊的情况。那么这道题目的特殊情况是什么呢?
我们先写出行和列大于等于2的一般情况。即下列程序else语句中的4个while语句,那么如果只有一行或者一列呢
如果用出现上述两种情况,那么将出现错误结果,为了代码思路清晰,我现在开头位置验证是否有这种情况,而else语句则处理一般行和列大于1的情况,最后代码如下:
如有不足的地方,欢迎批评指正。
说明[starti,startj]代表矩阵的左上角节点,[endi,endj]代表右下角节点,自己画个图将程序走一遍将有助于理解。
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> res;
if(matrix.empty()) return res;
int row=matrix.size();
int col=matrix[0].size();
int starti=0,startj=0;
int endi=row-1,endj=col-1;
int i=0,j=0;
while(starti<=endi&&startj<=endj){
i=starti;
j=startj;
if(startj==endj){
for(int ii=starti;ii<=endi;ii++){
res.push_back(matrix[ii][startj]);
}
}
else if(starti==endi){
for(int jj=startj;jj<=endj;jj++){
res.push_back(matrix[starti][jj]);
}
}
else{
while(j<=endj){
res.push_back(matrix[i][j]);
j++;
}
j=endj;
i++;
while(i<=endi){
res.push_back(matrix[i][j]);
i++;
}
i=endi;
j--;
while(j>=startj){
res.push_back(matrix[i][j]);
j--;
}
j=startj;
i--;
while(i>starti){
res.push_back(matrix[i][j]);
i--;
}
}
starti++;endi--;startj++;endj--;
}
return res;
}
};
思路:在写代码前一定要考虑几种比较特殊的情况。那么这道题目的特殊情况是什么呢?
我们先写出行和列大于等于2的一般情况。即下列程序else语句中的4个while语句,那么如果只有一行或者一列呢
如有不足的地方,欢迎批评指正。
说明[starti,startj]代表矩阵的左上角节点,[endi,endj]代表右下角节点,自己画个图将程序走一遍将有助于理解。
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> res;
if(matrix.empty()) return res;
int row=matrix.size();
int col=matrix[0].size();
int starti=0,startj=0;
int endi=row-1,endj=col-1;
int i=0,j=0;
while(starti<=endi&&startj<=endj){
i=starti;
j=startj;
if(startj==endj){
for(int ii=starti;ii<=endi;ii++){
res.push_back(matrix[ii][startj]);
}
}
else if(starti==endi){
for(int jj=startj;jj<=endj;jj++){
res.push_back(matrix[starti][jj]);
}
}
else{
while(j<=endj){
res.push_back(matrix[i][j]);
j++;
}
j=endj;
i++;
while(i<=endi){
res.push_back(matrix[i][j]);
i++;
}
i=endi;
j--;
while(j>=startj){
res.push_back(matrix[i][j]);
j--;
}
j=startj;
i--;
while(i>starti){
res.push_back(matrix[i][j]);
i--;
}
}
starti++;endi--;startj++;endj--;
}
return res;
}
};
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性