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

  • 相关阅读:
    vue 自定义全局按键修饰符
    Vue 过滤器
    v-if、v-show 指令
    其他内置函数
    python中序列化和反序列化
    jmeter图形化html报告核心指标介绍
    jmeter在linux系统下如何进行压力测试
    文件操作的其他方法
    文件处理操作
    内置函数reduce()
  • 原文地址:https://www.cnblogs.com/adamhome/p/7505811.html
Copyright © 2011-2022 走看看