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

 更新时间:2019年10月16日 12:01:14   作者:huhaishen  
这篇文章主要介绍了Java实现的打印螺旋矩阵算法,结合完整实例形式详细分析了java打印螺旋矩阵的算法原理与实现技巧,需要的朋友可以参考下

本文实例讲述了Java实现的打印螺旋矩阵算法。分享给大家供大家参考,具体如下:

一个N阶矩阵顺时针呈螺旋状,形如下面的矩阵:

思路:使用一个二维数组存放数据,数组初始化为0,数组共有n平方个元素,因为是从1开始,所以元素的值是从1到n×n。按照上面的路线从1开始遍历一遍填入数据,每填入一个数据时后,判断边界和方向(说明,任意长度和宽度都可以使用这个思路,本例使用N*N的矩阵说明)。直接上代码了:

package study.haishen.com;
/**
 * @author Administrator
 *
 */
public class SpiralMatrix {
    /**
     * @param n n阶
     * @return
     */
    public int[][] createMatrix(int n)
    {
        int[][] matrix = new int[n][n];//n*n的二维数组,初始元素值都为0
        int right = 1, down = 2, left = 3, up = 4;//分别表示右下左上四个方向
        int direction = right;
        int numb = n * n;//n阶矩阵,共有n×n个数
        int i = 0, j = 0;
        for (int p = 1; p <= numb; p++)
        {
            matrix[i][j] = p;
            //判断方向向右的情况
            if(direction == right)
            {
                //如果当前位置的右面位置在右边界内且值还是初始值,则行不变,列号向右移动一位
                if (j + 1 < n && matrix[i][j + 1] == 0)
                {
                    j++;
                } else {//如果超出右边边界,或者右面的元素已经被修改过,则向下移动一行,且将方向改为向下
                    i++;
                    direction = down;
                    continue;
                }
            }
            //判断方向向下的情况
            if (direction == down)
            {
                //如果当前位置的下面位置在下边界内且值还是初始值,则列不变,行号向下移动一位
                if (i + 1 < n && matrix[i + 1][j] == 0)
                {
                    i++;
                } else {//如果超出下边界,或者下面的元素已经被修改过,则向左移动一行,且将方向改为向左
                    j--;
                    direction = left;
                    continue;
                }
            }
            //判断方向向左的情况
            if (direction == left)
            {
                //如果当前位置的左面位置在左边界内且值还是初始值,则行不变,列号向左移动一位
                if (j - 1 >= 0 && matrix[i][j - 1] == 0)
                {
                    j--;
                } else {//如果超出左边界,或者左面的元素已经被修改过,则向上移动一行,且将方向改为向上
                    i--;
                    direction = up;
                    continue;
                }
            }
            //判断方向向上的情况
            if (direction == up)
            {
                //如果当前位置的上面位置在上边界内且值还是初始值,则列不变,行号向左移动一位
                if (i - 1 >= 0 && matrix[i - 1][j] == 0)
                {
                    i--;
                } else {//如果超出上边界,或者上面的元素已经被修改过,则向右移动一列,且将方向改为向右
                    j++;
                    direction = right;
                    continue;
                }
            }
        }
        return matrix;
    }
    /**
     * 测试
     * @param args
     */
    public static void main(String[] args) {
        int n = 10;
        SpiralMatrix s = new SpiralMatrix();
        int[][] data = s.createMatrix(n);
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                System.out.print(data[i][j] + " ");
            }
            System.out.println();
        }
    }
}

运行结果:

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

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

相关文章

  • Java递归来实现汉诺塔游戏,注释详细

    Java递归来实现汉诺塔游戏,注释详细

    这篇文章介绍了Java递归来实现汉诺塔游戏的方法,文中的代码注释介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • JAVA获取特定格式时间方式

    JAVA获取特定格式时间方式

    我们有时要获取时间,年月日时分秒周几,有时要以特定的格式出现,本文主要介绍了JAVA获取特定格式时间方式,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • 永中文档在线转换服务Swagger调用说明

    永中文档在线转换服务Swagger调用说明

    这篇文章主要为大家介绍了永中文档在线转换服务Swagger调用说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • MAC下如何设置JDK环境变量

    MAC下如何设置JDK环境变量

    这篇文章主要介绍了MAC下如何设置JDK环境变量问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • es创建索引和mapping的实例

    es创建索引和mapping的实例

    这篇文章主要介绍了es创建索引和mapping的实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Java GZip 基于内存实现压缩和解压的方法

    Java GZip 基于内存实现压缩和解压的方法

    这篇文章主要介绍了Java GZip 基于内存实现压缩和解压的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • SpringCloud微服务续约实现源码分析详解

    SpringCloud微服务续约实现源码分析详解

    这篇文章主要介绍了SpringCloud微服务续约实现源码分析,服务续期和服务注册非常相似,服务注册在Eureka Client程序启动之后开启,并同时开启服务续期的定时任务
    2022-11-11
  • 一不小心就让Java开发踩坑的fail-fast是个什么鬼?(推荐)

    一不小心就让Java开发踩坑的fail-fast是个什么鬼?(推荐)

    这篇文章主要介绍了Java fail-fast,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • JavaGUI实现随机单词答题游戏

    JavaGUI实现随机单词答题游戏

    这篇文章主要为大家详细介绍了JavaGUI实现随机单词答题游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • Spring Boot Actuator未授权访问漏洞的问题解决

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

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

最新评论