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

顺时针打印矩阵 按圈打印 java

2016-10-09 16:41 225 查看
顺时针打印矩阵

热度指数:1440时间限制:3秒空间限制:32768K

本题知识点: 模拟 数组

 算法知识视频讲解


题目描述

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

给定int矩阵mat,以及它的维数nxm,请返回一个数组,数组中的元素为矩阵元素的顺时针输出。
测试样例:
[[1,2],[3,4]],2,2

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


可以按圈打印,最大圈数的2倍不能超过 m和n的最小值

import java.util.*;

public class Printer {

public int[] clockwisePrint(int[][] mat, int n, int m) {
int[] ret = new int[n*m];
int k=0;
for(int s=0;s*2<m&&s*2<n;s++){
int endx = m-1-s;
int endy = n-1-s;
for(int i=s;i<=endx;++i) //左->右
ret[k++]=mat[s][i];
if(s<endy){ // 上->下
for(int i=s+1;i<=endy;++i)
ret[k++]=mat[i][endx];
}
if(s<endx&&s<endy){ //右->左
for(int i=endx-1;i>=s;--i)
ret[k++]=mat[endy][i];
}
if(s<endx&&s<endy-1){ //下->上
for(int i=endy-1;i>=s+1;--i){
ret[k++]=mat[i][s];
}
}
}
return ret;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息