您的位置:首页 > 其它

顺时针输出矩阵

2016-06-03 21:25 274 查看
对于一个矩阵,请设计一个算法从左上角(mat[0][0])开始,顺时针打印矩阵元素。

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

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


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

思路:首先确定思路,按层由外往内,因此必须确定每一层的起始点和终止点坐标(x,y),按照从左至右,从右至下,从下至左,从左至起点import java.util.*;

public class Test {
public List<Integer> list = new ArrayList<Integer>();

public int[] clockwisePrint(int[][] mat, int n, int m) {
// write code here
if (mat == null) {
return null;
}
int startX = 0;
int startY = 0;
int endY = mat[0].length - 1;
int endX = mat.length - 1;

while ((startX <= endX) && (startY <= endY)) {
printCircle(mat, startX, startY, endX, endY);
startX++;
startY++;
endX--;
endY--;
}
int [] arr = new int[n*m];
for(int i=0;i<m*n;i++){
arr[i] = list.get(i);
}
return arr;

}
public void printCircle(int[][] matrix, int startX, int startY, int endX, int endY) {
// only one column left
if (startY == endY) {
for (int i = startX; i <= endX; i++ ) {
list.add(matrix[i][endY]);
}
return;
}
// only one row left
if (startX == endX) {
for (int i = startY; i <= endY; i++ ) {
list.add(matrix[startX][i]);
}
return;
}
for (int i = startY; i < endY; i++ ) {
list.add(matrix[startX][i]);
}
for (int i = startX; i < endX; i++ ) {
list.add(matrix[i][endY]);
}
for (int i = endY; i > startY; i-- ) {
list.add(matrix[endX][i]);
}
for (int i = endX; i > startX; i-- ) {
list.add(matrix[i][startY]);
}

}
public static void main(String[] args) {
Test test = new Test();
int [][]arr ={{57,50,59,18,31,13},{67,86,93,86,4,9},{38,98,83,56,82,90},{66,50,67,11,7,69},{20,58,55,24,66,10},{43,26,65,0,64,28},{62,86,38,19,37,98}};
int [] result = test.clockwisePrint(arr,7,6);
for(int i = 0;i < result.length;i++){
System.out.print(result[i]+",");
}
}
}牛客网测试通过(在牛客网尽量不要使用static修饰成员变量和方法,经常导致编译结果出错)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: