您的位置:首页 > 其它

算法题目--顺时针打印矩阵

2017-06-25 19:50 309 查看
题目:



例如矩阵如下:

1     2      3      4

5     6      7      8

9    10    11    12

13  14    15    16

顺时针输出,结果应为:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。

参考剑指offer上的思路:



打印的顺序如上图所示。

循环结束的条件。



循环结束的条件为:

while(cols>start*2&&rows>start*2){

...................................

}

打印的步骤:





实现算法:

package test;

import java.util.ArrayList;

public class days3 {
public static void main(String[] args) {
//int[][] m={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
int[][] m={{1},{2},{3},{4}};
ArrayList<Integer> s=new ArrayList<Integer>();
s=printMatrix(m);
for(int i=0;i<s.size();i++){
System.out.print(s.get(i)+" ");
}
}
public static ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> s1=new ArrayList<Integer>();
int rows=matrix.length;
int cols=matrix[0].length;
if(matrix==null||rows==0||cols==0){
return s1;
}
int start=0;
while(rows>2*start&&cols>2*start){
int endx=cols-1-start;
int endy=rows-1-start;
//从左到右打印一行
for(int i=start;i<=endx;i++){
s1.add(matrix[start][i]);
}
//从上到下打印一列
if(endy>start){
for(int i=start+1;i<=endy;i++){
s1.add(matrix[i][endx]);
}
}
//从右到左打印一行
if(endy>start&&endx>start){
for(int i=endx-1;i>=start;i--){
s1.add(matrix[endy][i]);
}
}
//从下到上打印一列
if(endy>start+1&&endx>start){
for(int i=endy-1;i>start;i--){
s1.add(matrix[i][start]);
}
}
start++;
}
return s1;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: