最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)的打印螺旋矩陣算法示例

 更新時間:2019年10月16日 12:01:14   作者:huhaishen  
這篇文章主要介紹了Java實現(xiàn)的打印螺旋矩陣算法,結(jié)合完整實例形式詳細(xì)分析了java打印螺旋矩陣的算法原理與實現(xiàn)技巧,需要的朋友可以參考下

本文實例講述了Java實現(xiàn)的打印螺旋矩陣算法。分享給大家供大家參考,具體如下:

一個N階矩陣順時針呈螺旋狀,形如下面的矩陣:

思路:使用一個二維數(shù)組存放數(shù)據(jù),數(shù)組初始化為0,數(shù)組共有n平方個元素,因為是從1開始,所以元素的值是從1到n×n。按照上面的路線從1開始遍歷一遍填入數(shù)據(jù),每填入一個數(shù)據(jù)時后,判斷邊界和方向(說明,任意長度和寬度都可以使用這個思路,本例使用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的二維數(shù)組,初始元素值都為0
        int right = 1, down = 2, left = 3, up = 4;//分別表示右下左上四個方向
        int direction = right;
        int numb = n * n;//n階矩陣,共有n×n個數(shù)
        int i = 0, j = 0;
        for (int p = 1; p <= numb; p++)
        {
            matrix[i][j] = p;
            //判斷方向向右的情況
            if(direction == right)
            {
                //如果當(dāng)前位置的右面位置在右邊界內(nèi)且值還是初始值,則行不變,列號向右移動一位
                if (j + 1 < n && matrix[i][j + 1] == 0)
                {
                    j++;
                } else {//如果超出右邊邊界,或者右面的元素已經(jīng)被修改過,則向下移動一行,且將方向改為向下
                    i++;
                    direction = down;
                    continue;
                }
            }
            //判斷方向向下的情況
            if (direction == down)
            {
                //如果當(dāng)前位置的下面位置在下邊界內(nèi)且值還是初始值,則列不變,行號向下移動一位
                if (i + 1 < n && matrix[i + 1][j] == 0)
                {
                    i++;
                } else {//如果超出下邊界,或者下面的元素已經(jīng)被修改過,則向左移動一行,且將方向改為向左
                    j--;
                    direction = left;
                    continue;
                }
            }
            //判斷方向向左的情況
            if (direction == left)
            {
                //如果當(dāng)前位置的左面位置在左邊界內(nèi)且值還是初始值,則行不變,列號向左移動一位
                if (j - 1 >= 0 && matrix[i][j - 1] == 0)
                {
                    j--;
                } else {//如果超出左邊界,或者左面的元素已經(jīng)被修改過,則向上移動一行,且將方向改為向上
                    i--;
                    direction = up;
                    continue;
                }
            }
            //判斷方向向上的情況
            if (direction == up)
            {
                //如果當(dāng)前位置的上面位置在上邊界內(nèi)且值還是初始值,則列不變,行號向左移動一位
                if (i - 1 >= 0 && matrix[i - 1][j] == 0)
                {
                    i--;
                } else {//如果超出上邊界,或者上面的元素已經(jīng)被修改過,則向右移動一列,且將方向改為向右
                    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();
        }
    }
}

運行結(jié)果:

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計有所幫助。

相關(guān)文章

  • Spring Boot 如何自定義返回錯誤碼錯誤信息

    Spring Boot 如何自定義返回錯誤碼錯誤信息

    這篇文章主要介紹了Spring Boot 如何自定義返回錯誤碼錯誤信息的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • Maven打包后找不到class文件的問題

    Maven打包后找不到class文件的問題

    本文主要介紹了Maven打包后找不到class文件的問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Java編程Post數(shù)據(jù)請求和接收代碼詳解

    Java編程Post數(shù)據(jù)請求和接收代碼詳解

    這篇文章主要介紹了Java編程Post數(shù)據(jù)請求和接收代碼詳解,涉及enctype的三種編碼,post與get等相關(guān)內(nèi)容,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • 枚舉java語言中的修飾符組合的實例代碼

    枚舉java語言中的修飾符組合的實例代碼

    這篇文章主要介紹了枚舉java語言中的修飾符組合,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • Java Management Extensions管理擴(kuò)展原理解析

    Java Management Extensions管理擴(kuò)展原理解析

    這篇文章主要介紹了Java Management Extensions管理擴(kuò)展原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Java金額大小寫的轉(zhuǎn)換方法

    Java金額大小寫的轉(zhuǎn)換方法

    這篇文章主要為大家詳細(xì)介紹了Java金額大小寫的轉(zhuǎn)換方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Java StringBuffer與StringBuilder有什么區(qū)別

    Java StringBuffer與StringBuilder有什么區(qū)別

    當(dāng)對字符串進(jìn)行修改的時候,需要使用 StringBuffer 和 StringBuilder類,和String類不同的是,StringBuffer和 StringBuilder類的對象能夠被多次的修改,并且不產(chǎn)生新的未使用對象,本篇我們來分析分析它們的區(qū)別
    2023-01-01
  • 手把手教你SpringBoot輕松整合Minio

    手把手教你SpringBoot輕松整合Minio

    這篇文章主要介紹了手把手教你SpringBoot輕松整合Minio的方法,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2021-01-01
  • java中的instanceof關(guān)鍵字詳細(xì)解讀

    java中的instanceof關(guān)鍵字詳細(xì)解讀

    這篇文章主要介紹了java中的instanceof關(guān)鍵字詳細(xì)解讀,instanceof 是 Java 的保留關(guān)鍵字,它的作用是測試它左邊的對象是否是它右邊的類的實例,返回 boolean 的數(shù)據(jù)類型,需要的朋友可以參考下
    2024-01-01
  • java實現(xiàn)俄羅斯方塊

    java實現(xiàn)俄羅斯方塊

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06

最新評論

靖宇县| 昌都县| 钟祥市| 尼勒克县| 信阳市| 贵德县| 海南省| 合江县| 纳雍县| 广安市| 甘洛县| 凤冈县| 广元市| 郑州市| 余姚市| 长岛县| 扶余县| 资阳市| 金阳县| 阜宁县| 松桃| 永川市| 桃江县| 宁夏| 临夏市| 四会市| 柘城县| 临潭县| 襄城县| 长治县| 政和县| 黄骅市| 紫金县| 潼关县| 上栗县| 玉树县| 焉耆| 东光县| 丰县| 罗定市| 清镇市|