您的位置:首页 > 编程语言

编程 顺时针打印矩阵

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.
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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: