顺时针打印矩阵
2016-07-05 20:44
363 查看
题目来源:牛客网
对于一个矩阵,请设计一个算法从左上角(mat[0][0])开始,顺时针打印矩阵元素。
给定int矩阵mat,以及它的维数nxm,请返回一个数组,数组中的元素为矩阵元素的顺时针输出。
测试样例:
对于一个矩阵,请设计一个算法从左上角(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; }
相关文章推荐
- python+Eclipse+pydev环境搭建
- 利用除法计算整数的位数
- 流式布局的实现
- 【解决】UART问题
- iOS进阶5--使用Jenkins搭建持续集成打包平台
- text-align:center 和margin:0 auto的区别
- 交通序列号 简单DP
- 虚拟地址的映射建立
- Python IDLE reload(sys)后print无法正常执行命令的原因
- shell脚本:nginx访问日志切割与打包上传
- Spring Integration 项目实战
- 灯光探测器 Light Probes
- win7 删除右下角的win10升级提示
- 1007. To and Fro
- 如何在Java IDE中使用selenium
- 类似滑动苹果解锁Text
- AR实时阴影制作
- Spring整合Mybatis
- 品味类型——值类型和引用类型
- 常用正则表达式—想说爱你不容易