Java中怎么实现一个打印螺旋矩阵算法

发布时间:2021-07-22 16:14:53 作者:Leah
来源:亿速云 阅读:136

本篇文章给大家分享的是有关Java中怎么实现一个打印螺旋矩阵算法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

思路:使用一个二维数组存放数据,数组初始化为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中怎么实现一个打印螺旋矩阵算法,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

推荐阅读:
  1. 使用Java怎么实现一个螺旋矩阵
  2. Java实现的打印螺旋矩阵算法示例

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:如何解决PHP递归返回值时出现的问题

下一篇:Java中怎么利用Calendar计算时间

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》