输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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 ArrayList<Integer> printMatrix(int [][] matrix) {
        int lenRows = matrix.length;//矩阵的行长  
        int lenColumn = matrix[0].length;//列长 

        ArrayList<Integer> list = new ArrayList<Integer>();
        if(lenRows <= 0 || lenColumn <= 0||matrix==null){
            return list;
        }
        int start=0;//循环每次开始的点
        while(lenRows > start * 2 && lenColumn > start * 2 ){

            printMyResult(lenRows,lenColumn,start,list,matrix);
            
            ++start;
        }
        return list;
    }
    
    public void printMyResult(int lenRows,int lenColumn,int start,ArrayList<Integer> list,int[][] matrix){

        int endColumn = lenColumn-1-start;//终止列
        int endRows = lenRows-1-start;  //终止行


        
        /**
          *1.上面代码总是要打印的
          *2.右边代码打印必须是起始点小于终止行
          *3.下面代码实现必须是起始点小于终止行和终止列
          *4.左边代码执行的条件是起始点必须小于终止列,并且至少比终止行号小2
          */
        //上面代码
        for(int i = start; i <= endColumn ; i++){
            list.add((matrix[start][i]));
        }

        //右边实现......
        if( start < endRows){
            for(int i=start+1; i<= endRows ; i++){
                list.add((matrix[i][endColumn]));
            }
        }

        //下面代码实现
        if(start<endRows && start < endColumn){
            for(int i=endColumn-1; i >= start ; i--){
                list.add((matrix[endRows][i]));
            }
        }

        //左边实现
        if(start<endColumn&&start<endRows-1){
            for(int i = endRows-1 ; i > start; i--){
                list.add((matrix[i][start]));
            }
        }

    }

猜你喜欢

转载自www.cnblogs.com/q-1993/p/10681348.html