• 两种方法从外至里顺时针打印二维矩阵的各个变量


    两种方法的思路都是一致的,都是把一个二维矩阵看作一圈一圈的进行打印。

    输入: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());
    }
    }
    }

  • 相关阅读:
    LeetCode:149_Max Points on a line | 寻找一条直线上最多点的数量 | Hard
    LeetCode: 150_Evaluate Reverse Polish Notation | 分析逆波兰式 | Medium
    LeetCode:151_Reverse Words in a String | 字符串中单词的逆反 | Medium
    Cellular Traffic Offloading
    在word 2010中采用EndNote X7插入引用
    屏幕截图和标记
    A Nice Paper About Mobile Data Offloading
    linux Redhat 6环境上通过源码包安装DRBD 8
    hbase shell中执行list命令报错:ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing
    如何通过phoenix中查看表的主键信息
  • 原文地址:https://www.cnblogs.com/adamhome/p/7505811.html
Copyright © 2020-2023  润新知