• 顺时针打印矩形列表


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

    }

  • 相关阅读:
    DcotrineFixtureBundle学习
    php方法(1)
    学习笔记(2)
    微信access_token的获取
    学习笔记(1)
    与你相遇——博客园
    单例模式
    Java集合
    sql 优化
    缓存与数据库的数据一致性的解决方案(转)
  • 原文地址:https://www.cnblogs.com/tandy/p/5456518.html
Copyright © 2020-2023  润新知