顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.
主函数只管控制数组循环打印的条件,及辅助函数的打印
辅助函数只管根据左上及右下坐标进行打印
public static java.util.ArrayList printMatrix(int [][] matrix) { java.util.ArrayList<Integer> list = new java.util.ArrayList(); int rmin = 0; //左上row int lmin = 0; //左上line int rmax=matrix.length-1; //右下row int lmax = matrix[0].length-1; //右下line while(rmax>=rmin && lmax>=lmin){ print(list,matrix,rmin,lmin,rmax,lmax); if(rmax-rmin<=1||lmax-lmin<=1){ //只剩一两行或者一两列,表明上个print方法已经打印了所有数 break; } else{ rmax -=1; rmin +=1; lmax -=1; lmin +=1; } } return list; } public static void print(java.util.ArrayList list, int[][] arr,int rmin,int lmin,int rmax,int lmax){ //top for(int i=lmin;i<=lmax;i++){ list.add(arr[rmin][i]); } //right if(rmax-rmin>1){ //至少三行 for(int i=rmin+1;i<=rmax-1;i++){ list.add(arr[i][lmax]); } } //bottom if(rmax>rmin){ //至少两行 for(int i=lmax;i>=lmin;i--){ list.add(arr[rmax][i]); } } //left if(rmax-rmin>1 && lmax-lmin>0){ // 至少三行两列 for(int i=rmax-1;i>=rmin+1;i--){ list.add(arr[i][lmin]); } } }
posted on 2017-08-26 16:00 zhangxiaoyu 阅读(149) 评论(0) 收藏 举报
浙公网安备 33010602011771号