顺时针打印矩阵

来源:互联网 发布:华风爱科天气数据不对 编辑:程序博客网 时间:2024/05/23 15:07

题目描述:

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.

package JzOffer;import java.util.ArrayList;import java.util.List;/** * 从外向内打印矩阵 * @author 服兰 * */public class DayinJvzhen {public static void main(String[] argd){DayinJvzhen test = new DayinJvzhen();int[][] array={{1,2},{3,4}};System.out.println(test.spiralOrderprint(array));}    public ArrayList<Integer> spiralOrderprint(int[][] matrix){  ArrayList<Integer> result = new ArrayList<Integer>();  if(matrix.length==0){  return result;  }  int tR = 0;int tC = 0;  int dR = matrix.length-1;  int dC = matrix[0].length-1;  while(tR<=dR && tC<=dC){  printEdge(matrix, tR++, tC++, dR--, dC--, result);  }  return result;  }    /**   * 顺时针打印矩阵的一圈,改圈左上角是(tR,tC),右下角是(dR,dC)   * @param m   * @param tR   * @param tC   * @param dR   * @param dC   */  public void printEdge(int[][] m ,int tR,int tC,int dR,int dC,ArrayList<Integer> result){  if(tR == dR){ //只有一行  for(int i=tC;i<=dC;i++){  result.add(m[tR][i]);  }  }else if(tC == dC){ //只有一列  for(int i=tR;i<=dR;i++){  result.add(m[i][tC]);  }  }else{  int curR = tR;int curC = tC;  while(curC!=dC){ //从左向右  result.add(m[tR][curC]);  curC++; //此时curC = dC  }  while(curR!=dR){ //右上到右下  result.add(m[curR][dC]);  curR++; //此时curR = dR  }  while(curC!=tC){  //右下到左下  result.add(m[dR][curC]);  curC--; //此时curC = tC  }  while(curR!=tR){ //左下到左上  result.add(m[curR][tC]);  curR--;  }  }    }}


0 0
原创粉丝点击