zoukankan      html  css  js  c++  java
  • 顺时针打印矩形列表

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

    方法1

    public static ArrayList<Integer> printMatrix(int [][] matrix) {
    int n = matrix[0].length;
    int m = matrix.length;
    if(m == 0 ) return null;
    ArrayList<Integer> arr = new ArrayList<Integer>();

    int circle = ((Math.min(n, m)-1)/2)+1;//层数
    for(int i=0;i<circle;i++){
    for(int j = i;j<n-i;j++){//从左往右
    arr.add(matrix[i][j]);
    }
    for(int j=i+1;j<m-i;j++){//从上到下
    arr.add(matrix[j][n-i-1]);
    }
    for(int j=n-i-1-1;j>=i&&(m-i-1!=i);j--){//从右到左
    arr.add(matrix[m-i-1][j]);
    }
    for(int j=m-i-1-1;j>i&&(n-i-1!=i);j--){//从下到上
    arr.add(matrix[j][i]);
    }

    }
    return arr;

    }

    方法2:

    public static ArrayList<Integer> printMatrix1(int [][] matrix) {
    int n = matrix[0].length;
    int m = matrix.length;
    if(m == 0 ) return null;
    ArrayList<Integer> arr = new ArrayList<Integer>();

    int top = 0,left = 0,right = n-1,bottom =m-1;
    while(top<=bottom && left<=right){
    for(int i = left;i <=right;i++){//从左到右
    arr.add(matrix[top][i]);
    }
    for(int i = top+1;i<=bottom;i++){//从上到下
    arr.add(matrix[i][right]);
    }
    if(top!=bottom){
    for(int i = right-1;i>=left;i--){//从右到左
    arr.add(matrix[bottom][i]);
    }
    }
    if(left!=right){
    for(int i=bottom-1;i>top;i++){//从下到上
    arr.add(matrix[i][left]);
    }
    }
    top++;
    left++;
    right--;
    bottom--;

    }

    return arr;

    }

  • 相关阅读:
    NET Core 2.2
    NET Core项目模板
    Eclipse同时显示多个控制台项目的输出
    Java中的序列化
    Java中的泛型
    Java中的集合
    Java中的数据结构
    Java中的包
    Java中的接口
    Java中的封装
  • 原文地址:https://www.cnblogs.com/tandy/p/5456518.html
Copyright © 2011-2022 走看看