编程 顺时针打印矩阵
2016-03-10 20:01
309 查看
对于一个矩阵,请设计一个算法从左上角(mat[0][0])开始,顺时针打印矩阵元素。给定int矩阵mat,以及它的维数nxm,请返回一个数组,数组中的元素为矩阵元素的顺时针输出。
1.
class Printer {
public:
vector<int> clockwisePrint(vector<vector<int> > mat, int n, int m) {
vector<int> res;
int floor, right, bottom;
for(floor=0; floor<(n+1)/2&&floor<(m+1)/2; floor++){
right = m - 1 -floor;
bottom = n - 1 - floor;
for(int i=floor; i<=right; i++){
res.push_back(mat[floor][i]);
}
for(int j=floor+1; j<=bottom; j++){
res.push_back(mat[j][right]);
}
if(floor<bottom){
for(int i=right-1; i>=floor; i--){
res.push_back(mat[bottom][i]);
}
}
if(floor<right){
for(int i=bottom-1; i>floor; i--){
res.push_back(mat[i][floor]);
}
}
}
return res;
}
};
2.
1.
class Printer {
public:
vector<int> clockwisePrint(vector<vector<int> > mat, int n, int m) {
vector<int> res;
int floor, right, bottom;
for(floor=0; floor<(n+1)/2&&floor<(m+1)/2; floor++){
right = m - 1 -floor;
bottom = n - 1 - floor;
for(int i=floor; i<=right; i++){
res.push_back(mat[floor][i]);
}
for(int j=floor+1; j<=bottom; j++){
res.push_back(mat[j][right]);
}
if(floor<bottom){
for(int i=right-1; i>=floor; i--){
res.push_back(mat[bottom][i]);
}
}
if(floor<right){
for(int i=bottom-1; i>floor; i--){
res.push_back(mat[i][floor]);
}
}
}
return res;
}
};
2.
class Printer { public: vector<int> clockwisePrint(vector<vector<int> > mat, int n, int m) { vector<int>res; int up=0; int left=0; int down=n-1; int right=m-1; while(up<=down&&left<=right) { if(up==down) { for(int i=left;i<=right;i++) { res.push_back(mat[up][i]); } } else if(left==right) { for(int i=up;i<=down;i++) { res.push_back(mat[i][left]); } } else { int change=left; int temp=up; while(change!=right) { res.push_back(mat[up][change]); change++; } while(temp!=down) { res.push_back(mat[temp][right]); temp++; } while(change!=left) { res.push_back(mat[down][change]); change--; } while(temp!=up) { res.push_back(mat[temp][left]); temp--; } } left++; down--; up++; right--; } return res; } };
相关文章推荐
- 如何正确使用C++多重继承
- Java中的修饰符
- 在DLL编程中,导出函数为什么需要extern "C"
- Java小白手记2:一些名词解释
- Java编程思想学习(九) 异常处理
- Java小白手记2:一些名词解释
- 枚举
- C++面试(题)
- C++ map 的两种插入数据方法
- c/c++之:main函数参数
- 浅谈 C++ 中的 new/delete 和 new[]/delete[]
- C语言访问mysql数据库
- codeforces 651B B. Beautiful Paintings(贪心JAVA代码)
- [Java开发之路](19)Long缓存问题
- C和C++混合编程(__cplusplus使用)
- Java继承_接口练习题
- uiatuomator提示shortMsg=java.lang.RuntimeException
- 认识JAVA
- 初学django
- 虎小五进阶之路 · JDK的安装和环境配置