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

    第一种方式还不能成功运行,需要后续补充,也比第二种方法更麻烦一些。

    第一种方式是想要控制边界变量以及增加或者减少从而使用两个循环解决问题:

    代码如下:

    public ArrayList<Integer> printMatrix(int [][] matrix) {
    ArrayList<Integer> ret = new ArrayList<Integer>();
    int iStartBorder = 0;
    int iEndBorder = matrix.length - 1;
    int jStartBorder = 0;
    int jEndBorder = matrix[0].length - 1;
    int i = 0;
    int j = 0;
    boolean iAddFlag = true;
    boolean jAddFlag = true;
    for (;i >= iStartBorder && i <= iEndBorder;) {
    for (;j >= jStartBorder && j <= jEndBorder;) {
    ret.add(matrix[i][j]);
    if (jAddFlag) {
    j++;
    } else {
    j--;
    }
    }
    if (j == jEndBorder + 1) {
    jEndBorder--;
    i++;
    if (i == iEndBorder) {
    jAddFlag = false;
    } else if (i == iStartBorder) {
    jAddFlag = true;
    }
    } else if (j == jStartBorder - 1) {
    j = jStartBorder;
    i--;
    if (i == iStartBorder) {
    jStartBorder++;
    jEndBorder--;
    if (iStartBorder < iEndBorder || jStartBorder < jEndBorder) {
    break;
    }
    }
    }
    }
    return ret;
    }

    第二种方法:

    import java.util.ArrayList;
    import java.util.Iterator;

    public class Matrix {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
    ArrayList<Integer> ret = new ArrayList<Integer>();
    int row = matrix.length;
    int column = matrix[0].length;
    int circle = ((row < column ? row:column) - 1)/2 + 1;
    for (int i = 0;i < circle ;i++) {
    for (int j = i; j < column - i; j++) {
    ret.add(matrix[i][j]);
    }
    for (int j = i + 1; j < row - i; j++) {
    ret.add(matrix[j][column - i - 1]);
    }
    /*
    * 防止中间行多次打印(当行数小于列数并且是奇数时)
    */
    if (row - i - 1 != i) {
    for (int j = column - i - 2; j >= i; j--) {
    ret.add(matrix[row - i - 1][j]);
    }
    }
    /*
    * 防止中间列多次打印(当列数小于行数并且是奇数)
    */
    if (column - i - 1 != i) {
    for (int j = row - i - 2; j > i; j--) {
    ret.add(matrix[j][i]);
    }
    }
    }
    return ret;
    }
    public static void main(String [] args) {
    int[][] matrix = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}, {17,18,19,20}};
    ArrayList<Integer> al = new Matrix().printMatrix(matrix);
    for (Iterator<Integer> it = al.iterator(); it.hasNext();) {
    System.out.println(it.next());
    }
    }
    }

  • 相关阅读:
    k8s资源清单创建pod
    Nginx的应用之动静分离
    Nginx的应用之虚拟主机
    Nginx的应用之安装配置
    k8s 基于NFS部署storageclass pv自动供给
    Helm入门
    k8s Pod的自动水平伸缩(HPA)
    k8s资源指标API及metrics-server资源监控
    k8s的资源限制及资源请求
    k8s的高级调度方式
  • 原文地址:https://www.cnblogs.com/adamhome/p/7505811.html
Copyright © 2011-2022 走看看