java实现的顺时针/逆时针打印矩阵操作示例

java实现的顺时针/逆时针打印矩阵操作。分享给大家供大家参考,具体如下:

public class SnakeMatrix {
  /**
   * 定义矩阵的阶数
   */
  private int n;
  //填充矩阵的值
  private int k = 1;
  private int[][] data;
  /**
   * 定义矩阵移动的方向
   */
  public enum Direction {
    left, right, up, down,
  }
  SnakeMatrix(int n) {
    this.n = n;
    data = new int[n][n];
  }
  public void clockwisePrintMatrix() {
    //定义行数
    int rowLen = data.length;
    //定义列数
    int columnLen = data.length;
    //移动方向
    Direction direction = Direction.right;
    //定义上边界
    int upBound = 0;
    //定义下边界
    int downBound = rowLen - 1;
    //定义左边界
    int leftBound = 0;
    //定义右边界
    int rightBound = columnLen - 1;
    //矩阵当前行数
    int row = 0;
    //矩阵当前列数
    int column = 0;
    while (true) {
      data[row][column] = k++;
      if (upBound == downBound && leftBound == rightBound) {
        // System.out.println(" upBound :"+upBound +" downBound :"+downBound+" leftBound :"+leftBound +" rightBound :"+rightBound);
        break;
      }
      switch (direction) {
        case right:
          if (column < rightBound) {
            ++column;
          } else {
            ++row;
            direction = Direction.down;
            ++upBound;
          }
          break;
        case down:
          if (row < downBound) {
            ++row;
          } else {
            --column;
            direction = Direction.left;
            --rightBound;
          }
          break;
        case up:
          if (row > upBound) {
            --row;
          } else {
            ++column;
            direction = Direction.right;
            ++leftBound;
          }
          break;
        case left:
          if (column > leftBound) {
            --column;
          } else {
            --row;
            direction = Direction.up;
            --downBound;
          }
          break;
        default:
          break;
      }
    }
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j++) {
        System.out.printf("%2d%s", data[i][j], " ");
      }
      System.out.println();
    }
  }
  public void anticlockwisePrintMatrix() {
    int rowLen = data.length;
    int columnLen = data.length;
    int leftBound = 0;
    int rightBound = columnLen - 1;
    int upBound = 0;
    int downBound = rowLen - 1;
    int row = 0;
    int column = 0;
    Direction direction = Direction.down;
    while (true) {
      data[row][column] = k++;
      if (rightBound == leftBound && upBound == downBound) {
        break;
      }
      switch (direction) {
        case down:
          if (row < downBound) {
            row++;
          } else {
            column++;
            direction = Direction.right;
            leftBound++;
          }
          break;
        case right:
          if (column < rightBound) {
            column++;
          } else {
            row--;
            direction = Direction.up;
            downBound--;
          }
          break;
        case up:
          if (row > upBound) {
            row--;
          } else {
            direction = Direction.left;
            column--;
            rightBound--;
          }
          break;
        case left:
          if (column > leftBound) {
            column--;
          } else {
            direction = Direction.down;
            row++;
            upBound++;
          }
          break;
        default:
          break;
      }
    }
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j++) {
        System.out.printf("%2d%s", data[i][j], " ");
      }
      System.out.println();
    }
  }
}

首先呢上面是定义一个工具类,

public class MainActivity extends AppCompatActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    int number = 5;
    SnakeMatrix snakeMatrix = new SnakeMatrix(number);
    snakeMatrix.anticlockwisePrintMatrix();
    //snakeMatrix.clockwisePrintMatrix();
  }
}

直接进行使用,有两个方法,一个正序一个倒序

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

(0)

相关推荐

  • Java实现的打印螺旋矩阵算法示例

    本文实例讲述了Java实现的打印螺旋矩阵算法.分享给大家供大家参考,具体如下: 一个N阶矩阵顺时针呈螺旋状,形如下面的矩阵: 思路:使用一个二维数组存放数据,数组初始化为0,数组共有n平方个元素,因为是从1开始,所以元素的值是从1到n×n.按照上面的路线从1开始遍历一遍填入数据,每填入一个数据时后,判断边界和方向(说明,任意长度和宽度都可以使用这个思路,本例使用N*N的矩阵说明).直接上代码了: package study.haishen.com; /** * @author Administr

  • java实现顺时针打印矩阵

    本文实例为大家分享了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     2    3    4 5     6    7    8 9    10  11  12 13  14  15  16 方法一: 介

  • Java顺时针打印矩阵

    本文实例为大家分享了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. 思路: 首先拿到这个题,读完题我们脑子里会呈现出这样的一个画面.从外

  • java编程题之顺时针打印矩阵

    本文实例为大家分享了java顺时针打印矩阵的具体代码,供大家参考,具体内容如下 github:剑指offer编程题 import java.util.ArrayList; /** * * 剑指offer编程题(JAVA实现)--第19题:顺时针打印矩阵 * * 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如, 如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,1

  • Java实现矩阵加减乘除及转制等运算功能示例

    本文实例讲述了Java实现矩阵加减乘除及转制等运算功能.分享给大家供大家参考,具体如下: Java初学,编写矩阵预算程序,当做工具,以便以后写算法时使用. public class MatrixOperation { public static int[][] add(int[][] matrix_a, int[][] matrix_b) { int row = matrix_a.length; int col = matrix_a[0].length; int[][] result = new

  • java实现转圈打印矩阵算法

    本文实例为大家分享了java实现转圈打印矩阵的具体代码,供大家参考,具体内容如下 给定一个整形矩阵Matrix,请按照顺时针方向转圈的方式,输入(打印)元素值. 例如: 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 要求:额外空间复杂度为O(1) JAVA代码如下: package com.bean.algorithmexec; public class MatrixDemo

  • Java实现的求逆矩阵算法示例

    本文实例讲述了Java实现的求逆矩阵算法.分享给大家供大家参考,具体如下: package demo; public class MatrixInverse { public static double Det(double [][]Matrix,int N)//计算n阶行列式(N=n-1) { int T0; int T1; int T2; double Num; int Cha; double [][] B; if(N>0) { Cha=0; B=new double[N][N]; Num=

  • Java实现的按照顺时针或逆时针方向输出一个数字矩阵功能示例

    本文实例讲述了Java实现的按照顺时针或逆时针方向输出一个数字矩阵功能.分享给大家供大家参考,具体如下: 题目:按照指定的长宽和输出方向,从外向内打印一个从 1 开始的数字矩阵,矩阵的开始位置在左上角.如下图 代码及注释如下: public class NumberMatrix { public static void main(String[] args) { int width = 25; int height = 12; boolean clockwise = false; System.

  • Java实现输出回环数(螺旋矩阵)的方法示例

    本文实例讲述了Java实现输出回环数(螺旋矩阵)的方法.分享给大家供大家参考,具体如下: 以前见过,没做出来:那天论坛再见,灵感来了,太神奇了 复杂度好像为 o(n) 保存下来 package demo; public class snakeMatrixDemo { public static void main(String[] args) { int m = 5;/* 行 */ int n = 5;/* 列 */ int[][] pos = new int[m][n];/* 位置 */ /*

  • Java编程实现打印螺旋矩阵实例代码

    直接上代码吧. 昨晚腾讯在线测试遇到的题. 螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环. import java.util.Scanner; public class mysnakematrix { private int n; // private int a[][]; // 声明一个矩阵 private int value = 1; // 矩阵里数字的值 public mysnakematrix(int i) { this.n

  • java 二维数组矩阵乘法的实现方法

    复制代码 代码如下: public interface IMatrixMultiple {     public int[][] mmltiple(int[][]a ,int [][]b); } ?public class MatrixMultiple implements IMatrixMultiple { @Override    public int[][] mmltiple(int[][] a, int[][] b) {         int [][] result = new int

随机推荐