【算法】-- 【螺旋矩陣】

今天去智度科技面試,遇到一個算法題,沒有答上,可惜了這次機會。

從矩陣的左上角出發,初始時向右移動;如果前方是未曾經過的格子,則繼續前進,否則右轉;重複上述操作直至經過矩陣中所有格子。根據經過順序,在格子中依次填入1, 2, 3, … , n1,2,3,…,n,便構成了一個螺旋矩陣。2

下圖是一個n = 4n=4 時的螺旋矩陣。

在這裏插入圖片描述
實現算法如下:

 public static void getLuoXuan(int n){
        int[][] arr = new int[n][n];

        int m;  //m表示循環的次數,如果n爲偶數的話就循環n/2次,n爲奇數的話就循環(n+1)/2次
        if (n%2==0)//n爲偶數
            m=n/2;
        else
            m=(n+1)/2;

        int value=1;
        for (int i=0;i<m;i++){

            for (int a=i;a<=n-i-1;a++){    //從左到右
                arr[i][a]=value++;
            }

            for (int b =i+1;b<=n-i-1;b++){//從上到下
                arr[b][n-i-1]=value++;
            }

            for (int c=n-i-2;c>=i;c--){//從右到左
                arr[n-i-1][c]=value++;
            }

            for (int d =n-i-2;d>=i+1;d--){//從下到上
                arr[d][i]=value++;
            }
        }

        for (int i=0;i<n;i++){
            for (int j=0;j<n;j++){
                System.out.print(arr[i][j]+" ");
            }
            System.out.println();
        }

    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章