欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字

程序员文章站 2022-07-12 09:14:00
...


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

package com.fit;
import java.util.ArrayList;
import java.util.List;

public class MyTest {
    public static List<Integer> printMatrix(int[][] matrix) {
        List<Integer> rs = new ArrayList<Integer>();
        int length = matrix.length;
        Integer[] direct = new Integer[2];
        direct[0] = 0;
        direct[1] = 1;
        int row = 0;
        int column = 0;
        for(int i = 0;i < length*length; i++){
            rs.add(matrix[row][column]);
            //
            System.out.print(" "+matrix[row][column]);
            direct = validateDirect(direct,row,column,length);//获得顺时针方向
            row = row + direct[0] ;
            column = column + direct[1];
        }
        return rs;
    }
/**
 * row:0,column:n-1
 * row:1,column:n-2
 */
    private static Integer[] validateDirect(Integer[] direct, int row, int column, int length) {
        //计算上下左右的距离由此决定运动方向
        int top = row ;
        int bottom = length - top-1;
        int left = column ;
        int right = length - left-1;

        if(direct[0]==0){
            if(direct[1]==1){//0,1,右
                if(top==right){
                    direct[0]=1;
                    direct[1]=0;
                }else {
                    return direct;
                }
            }else {
                if(bottom==left){//0,-1;左
                    direct[0]=-1;
                    direct[1]=0;
                }
                else {
                    return direct;
                }
            }
        }else {
            if(direct[0]==1){//1,0;下
                if(bottom==right){
                    direct[0]=0;
                    direct[1]=-1;
                }else {
                    return direct;
                }
            }
            else {
                if(top==left||row-column<=1){//-1,0;上
                    direct[0]=0;
                    direct[1]=1;
                }
                else {
                    return direct;
                }
            }
        }
        return direct;
    }

    public static void main(String args[]){
        int n = 9;
       int [][] matrix = new int[n][n];
       for(int i=0; i<n;i++){
           for(int j=0 ; j<n;j++){
               matrix[i][j] = (int) (Math.random()*9);
               System.out.print(matrix[i][j]+" ");
           }
           System.out.println();
       }
        printMatrix(matrix);
    }
}