java实现转圈打印矩阵算法

 更新时间:2019年03月02日 11:16:13   作者:梅森上校  
这篇文章主要为大家详细介绍了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 {

 /*
  * 给定一个整形矩阵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)
  * */

 public static void main(String[] args) {
  // TODO Auto-generated method stub

  //初始化一个 4*4的整形矩阵,从第一行第一列从左向右,第二行,第三行,直到第四行依次赋值 1,2,...16.
  int[][] matrixDemo=new int[4][4];
  matrixDemo=createMatrix();
  printMatrix(matrixDemo);

  //转圈打印
  spiralOrderPrint(matrixDemo);

 }

 private static int[][] createMatrix() {
  // TODO Auto-generated method stub
  int matrix[][]=new int[4][4];
  int k=1;
  for(int i=0;i<4;i++) {
   for(int j=0;j<4;j++) {
    matrix[i][j]=k;
    k++;
   }
  }

  return matrix;
 }

 //顺序打印矩阵元素
 private static void printMatrix(int[][] matrix) {
  for(int i=0;i<4;i++) {
   for(int j=0;j<4;j++) {
    System.out.print(matrix[i][j]+"\t");
   }
   System.out.println();
  }

 }

 //转圈打印
 private static void spiralOrderPrint(int[][] matrix) {
  int tR=0;
  int tC=0;
  int dR=matrix.length-1;
  int dC=matrix[0].length-1;
  while(tR<=dR && tC<=dC) {
   printEdge(matrix, tR++, tC++, dR--,dC--);
  }
 }

 private static void printEdge(int[][] matrix, int tR, int tC, int dR, int dC) {
  // TODO Auto-generated method stub
  if(tR==dR) {
   //子矩阵只有一行时
   for(int i=tC;i<=dC;i++) {
   System.out.print(matrix[tR][i]+" ");
   }

  }else if(tC==dC) {
   //子矩阵只有一列时
   for(int i=tR;i<=dR;i++){
    System.out.print(matrix[i][tC]+" ");
   }

  }else {
   //一般情况
   int curC=tC;
   int curR=tR;
   while(curC!= dC) {
    System.out.print(matrix[tR][curC]+" ");
    curC++;
   }

   while(curR!= dR) {
    System.out.print(matrix[curR][dC]+" ");
    curR++;
   }

   while(curC!= tC) {
    System.out.print(matrix[dR][curC]+" ");
    curC--;
   }

   while(curR!= tR) {
    System.out.print(matrix[curR][tC]+" ");
    curR--;
   }
  }
 }


}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 基于Java解决华为机试实现整数与IP地址间的转换 

    基于Java解决华为机试实现整数与IP地址间的转换 

    这篇文章主要介绍了基于Java解决华为机试实现整数与IP地址间的转换,文章举例说明围绕文章主题展开相关内容,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-02-02
  • Java基于logback MessageConverter实现日志脱敏方案分析

    Java基于logback MessageConverter实现日志脱敏方案分析

    本文介绍了一种日志脱敏方案,即基于logbackMessageConverter和正则匹配的方法,该方法的优点是侵入性低,工作量少,只需修改xml配置文件,适用于老项目,感兴趣的朋友跟随小编一起看看吧
    2024-10-10
  • java获取文件扩展名的方法小结【正则与字符串截取】

    java获取文件扩展名的方法小结【正则与字符串截取】

    这篇文章主要介绍了java获取文件扩展名的方法,结合实例形式分析了使用正则与字符串截取两种获取扩展名的操作技巧,需要的朋友可以参考下
    2017-01-01
  • SpringRetry重试机制之@Retryable注解与重试策略详解

    SpringRetry重试机制之@Retryable注解与重试策略详解

    本文将详细介绍SpringRetry的重试机制,特别是@Retryable注解的使用及各种重试策略的配置,帮助开发者构建更加健壮的应用程序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • springMarchal集成xStream的完整示例代码

    springMarchal集成xStream的完整示例代码

    这篇文章主要介绍了springMarchal集成xStream的示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • Spring Boot 与 Kotlin 使用Redis数据库的配置方法

    Spring Boot 与 Kotlin 使用Redis数据库的配置方法

    Redis是目前业界使用最广泛的内存数据存储。下面通过本文给大家介绍Spring Boot 与 Kotlin 使用Redis数据库的配置方法,感兴趣的朋友一起看看吧
    2018-01-01
  • SpringBoot整合Zookeeper详细教程

    SpringBoot整合Zookeeper详细教程

    Curator是Netflix公司开源的⼀套zookeeper客户端框架,Curator是对Zookeeper⽀持最好的客户端框架。Curator封装了⼤部分Zookeeper的功能,⽐如Leader选举、分布式锁等,减少了技术⼈员在使⽤Zookeeper时的底层细节开发⼯作
    2022-12-12
  • Spring Boot Actuator未授权访问漏洞的问题解决

    Spring Boot Actuator未授权访问漏洞的问题解决

    Spring Boot Actuator 端点的未授权访问漏洞是一个安全性问题,可能会导致未经授权的用户访问敏感的应用程序信息,本文就来介绍一下解决方法,感兴趣的可以了解一下
    2023-09-09
  • springBoot整合Eureka启动失败的解决方案

    springBoot整合Eureka启动失败的解决方案

    这篇文章主要介绍了springBoot整合Eureka启动失败的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • springboot通过注解、接口创建定时任务详解

    springboot通过注解、接口创建定时任务详解

    使用SpringBoot创建定时任务其实是挺简单的,这篇文章主要给大家介绍了关于springboot如何通过注解、接口创建这两种方法实现定时任务的相关资料,需要的朋友可以参考下
    2021-07-07

最新评论