您的位置:首页 > 其它

顺时针打印矩阵

2016-07-05 20:44 363 查看
题目来源:牛客网

对于一个矩阵,请设计一个算法从左上角(mat[0][0])开始,顺时针打印矩阵元素。

给定int矩阵mat,以及它的维数nxm,请返回一个数组,数组中的元素为矩阵元素的顺时针输出。

测试样例:
[[1,2],[3,4]],2,2

返回:[1,2,4,3]

一个n行m列的矩阵



图中startY=endY=1,表示只剩下一行了。因为X方向还没到尽头(startX=1,endX=2)。
同理,当startX==endX时,表示只剩下一列了。


publicint[]clockwisePrint(int[][]mat,intn,intm){

int[]res=newint[n*m];
if(mat==null)returnres;

inti=0;

intstartX=0,startY=0,endX=m-1,endY=n-1;
while(startX<=endX&&startY<=endY){

//剩下一列
if(startX==endX){
for(intj=startY;j<=endY;++j)
res[i++]=mat[j][startX];
break;
}

//剩下一行
if(startY==endY){
for(intj=startX;j<=endX;++j)
res[i++]=mat[startY][j];
break;
}

//从左到右上面一行(除了右上角那个数)
for(intj=startX;j<endX;++j){
res[i++]=mat[startY][j];
}

//从上到下右边一列(除了右下角那个数)
for(intj=startY;j<endY;++j){
res[i++]=mat[j][endX];
}

//从右到左底部一行(除了左下角那个数)
for(intj=endX;j>startX;j--){
res[i++]=mat[endY][j];
}

//从下到上左边一列(除了左上角那个数)
for(intj=endY;j>startY;j--){
res[i++]=mat[j][startX];
}

startX++;
startY++;
endX--;
endY--;
}

returnres;
}
  





                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: