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


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


 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值