用java实现螺旋矩阵算法


一、思路讲解
刚拿到这道题的时候想的是一圈一圈的实现一个螺旋矩阵,但我觉得那样的方法太麻烦了,在网上看到一个大佬的算法觉得挺好的,自己总结了一下,拿出来给大家分享分享。
这个算法的思想是从中心最大的数向外逆时针转出来,依次填数。如图所示
这里我们先不考虑奇数的情况,奇数的规律和偶数的一样,这里用5阶矩阵作为例子讲解。我们把这个矩阵两边的对角线连接起来就会发现,矩阵被分为4个部分:
绿色的线的方程为 y=x
蓝色的线的方程为 y=5-x-1(5为矩阵的阶数,因为数组下表从0开始所以要-1)
只要考虑好边界上坐标的变化趋势,我们可以看出每个部分坐标的变化规律,分别是x++,x–,y++,y–,根据坐标的变化我们能得到算法:

  • 先从中间出发,计算出中心最大值的坐标:
a=size;               //  size为矩阵的阶数
if(a%2==0)  x=a/2-1;
else x=a/2;
y=a/2;

当矩阵为偶数阶次时,中心在(a/2,a/2)
当矩阵为奇数阶次时,中心在(a/2-1,a/2)

  • 根据各部分的规律从中心依次向外赋值:
for(i=size*size;i>0;i--){if(x<=a-y-1 && x>=y){Arr[y][x]=i;x--;}else if(x<a-y-1 && x<y){Arr[y][x]=i;y++;}else if(x>=a-y-1 && x<y){Arr[y][x]=i;x++;}else if(x>a-y-1 && x>=y){Arr[y][x]=i;y--;}
}

这里要注意边界属于哪部分,根据从中心逆时针的顺序,自己在纸上画一画就能明白了。
下面是完整的代码:

import java.util.*;class SpiralMatrix{public void creatMatrix(int size, int[][] Arr){int x,y,a;int i;a=size;      //  size为矩阵的阶数if(a%2==0)  x=a/2-1;else x=a/2;y=a/2;for(i=size*size;i>0;i--){if(x<=a-y-1 && x>=y){Arr[y][x]=i;x--;}else if(x<a-y-1 && x<y){Arr[y][x]=i;y++;}else if(x>=a-y-1 && x<y){Arr[y][x]=i;x++;}else if(x>a-y-1 && x>=y){Arr[y][x]=i;y--;}}}public void printResult(int size,int[][] Arr){int i,j;for(i=0;i<size;i++){for(j=0;j<size;j++){System.out.printf("%-5d",Arr[i][j]);}System.out.print("\n");}}}public class test{public static void main(String args[]){Scanner sc = new Scanner(System.in);int size;System.out.print("请输入螺旋矩阵的阶数:");size = sc.nextInt();int[][] Arr = new int[size][size];SpiralMatrix Smatrix = new SpiralMatrix();Smatrix.creatMatrix(size,Arr);System.out.println(" "+size+"阶螺旋矩阵:");Smatrix.printResult(size,Arr);}
}

这是最简单的螺旋矩阵形式,还有其他形式的,都可以用这个思想来处理,只需要稍微改动一下边界的规律就可以了。

本人小白一只,有什么不足的地方还望大家多多指教,多多交流。

用java实现螺旋矩阵算法相关推荐

  1. java编写螺旋矩阵讲解_Java如何实现螺旋矩阵 Java实现螺旋矩阵代码实例

    本篇文章小编给大家分享一下Java实现螺旋矩阵代码实例,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时 ...

  2. java数组螺旋矩阵从上到下_Java-基础编程(螺旋矩阵乘法表)

    package cn.rick.study; import java.io.BufferedReader; import java.io.InputStreamReader; import java. ...

  3. java 外螺旋矩阵_螺旋矩阵的java实现

    今天参加了腾讯实习生的在线笔试,螺旋矩阵的问题,算是ACM的入门题吧 想到了有两种实现递归和非递归 输入:3 输出: 1  2  3 8  9  4 7  6  5 输入:5 输出: 1  2  3 ...

  4. Java实现螺旋矩阵

    螺旋矩阵:螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环.如下: 下面的代码可以作为参考,大家自己写的可以输入: 1,1: 1,2: 3,5 ...

  5. js实现螺旋矩阵算法

    Q:用0-9填充一个N*N的矩阵,该矩阵按顺时针旋转方向依次增大,用js编程输出这个数组.要求如下: 我的思路是把矩形数组从外到里分为几个环型数组,然后用这些环型数组给二维数组赋值,如图所示: 部分代 ...

  6. 【LeetCode-面试算法经典-Java实现】【054-Spiral Matrix(螺旋矩阵)】

    [054-Spiral Matrix(螺旋矩阵)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a matrix of m x n elements (m ...

  7. 螺旋矩阵(Java)

    螺旋矩阵 (牛客网-牛客题霸算法篇-NC38) 题目描述 给定一个m行n列大小的矩阵,按螺旋的顺序返回矩阵中的所有元素. 思路 Java实现 这道题目属于一道模拟题,只需要找出输出的规则和边界终止条件 ...

  8. 用python做算法_自己用python写的螺旋矩阵生成算法

    自己用python写的螺旋矩阵生成算法 如果输入6,可以生成如下矩阵: 1 20 19 18 17 16 2 21 32 31 30 15 3 22 33 36 29 14 4 23 34 35 28 ...

  9. java矩阵连乘算法_使用java写的矩阵乘法实例(Strassen算法)

    Strassen算法于1969年由德国数学家Strassen提出,该方法引入七个中间变量,每个中间变量都只需要进行一次乘法运算.而朴素算法却需要进行8次乘法运算. 原理 Strassen算法的原理如下 ...

最新文章

  1. 理解 Azure 虚拟机的性能监视
  2. 将k个有序链表合并成一个有序链表
  3. 如何避免Java线程中的死锁?
  4. DIV背景半透明,DIV中的字不半透明
  5. SpringBoot2 整合FreeMarker模板,完成页面静态化处理
  6. dd var tmp .oracle,Oracle 11gR2 RAC ohasd failed to start 解决方法
  7. android可以root的版本,Android8.0以上系统ROOT时,Magisk框架替代SpuerSU
  8. linux最小化连接开放wifi,CentOS最小化安装后启用无线连接网络
  9. 民营银行是怎样炼成的:优中选优最终挑选出5家
  10. 智能陈桥五笔输入法 for linux,智能陈桥五笔 for Linux
  11. 校招软件测试面经篇二(国企、银行、运营商等)
  12. CSS3实现渐变背景
  13. 解决VMware虚拟机安装ikuai限速10M
  14. 西门子1500和300哪个贵_西门子s71500与s7300的区别
  15. NYOJ-20 吝啬的国度 AC
  16. MATLAB 将图像随机裁剪为N*N的图像块
  17. java对象转换String类型的三种方法
  18. SYBASE 12.5 维护手册 3. 技术专刊
  19. node.js+uni计算机毕设项目计算机配件价格查询微信小程序(程序+小程序+LW)
  20. 【热门】2004年十大网络流行语征集ing

热门文章

  1. 润和软件携手高鸿信安助力构建可信计算生态
  2. 脚手架的这个好搭档 今天要重点来介绍下!
  3. 宜搭产品生态伙伴政策——宜搭:高效的低代码应用构建平台
  4. HTML/CSS中的空格处理
  5. Python中的对日期时间的处理
  6. 日期类的实现(C++编写练习类与对象)
  7. 如何将邮箱里一封邮件添加到附件中进行发送
  8. J版 OpenStack动态加载菜单图片详解
  9. SSM疫情防控志愿者管理系统 志愿者服务信息系统 大学志愿者管理系统Java
  10. md5在线加密解密是不是什么都能解密?为什么我的没有解出来呢?