www

导航

顺时针打印矩阵

    public static ArrayList<Integer> printMatrix(int[][] matrix) {
ArrayList
<Integer> ret = new ArrayList<>(); if(matrix == null||matrix.length==0||matrix[0].length==0) return ret; int m = matrix.length, n = matrix[0].length; //矩阵的行,列 int circle = (Math.min(m,n)-1)/2+1; int a_row = 0, a_col = 0; //左上角坐标 int b_row = 0, b_col = n-1; //右上角坐标 int c_row = m-1, c_col = n-1; //右下角坐标 int d_row = m-1, d_col = 0; //左下角坐标 for(int i=0; i<circle; i++){ if(a_row == d_row){ //横行 for(int k=a_col; k<=b_col; k++) ret.add(matrix[a_row][k]); } else if(a_col == b_col){ //竖行 for(int k=a_row; k<=d_row; k++) ret.add(matrix[k][a_col]); } else { //多维矩阵 for(int k=a_col; k<b_col; k++) ret.add(matrix[a_row][k]); for(int k=b_row; k<c_row; k++) ret.add(matrix[k][b_col]); for(int k=c_col; k>d_col; k--) ret.add(matrix[c_row][k]); for(int k=d_row; k>a_row; k--) ret.add(matrix[k][d_col]); a_row++; a_col++; //更新左上角坐标 b_row++; b_col--; //更新右上角坐标 c_row--; c_col--; //更新右下角坐标 d_row--; d_col++; //更新左下角坐标 } } return ret; }

 

posted on 2019-02-28 16:45  www_practice  阅读(209)  评论(0编辑  收藏  举报