leetcode 59. 螺旋矩陣 II 擊敗20.83%

給定一個正整數 n,生成一個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的正方形矩陣。

示例:

輸入: 3 輸出: [
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ] ]

 public int[][] generateMatrix(int n) {
        if (n == 1) {
            int[][] A = new int[1][1];
            A[0][0] = 1;
            return A;
        }
        int[][] A = new int[n][n];
        //0代表往右,1代表往下,2代表往左,3代表往上
        int direct = 0;
        //從A[0][0]開始
        int i = 0, j = 0;
        int count = 2;
        A[0][0] = 1;
        while (true) {
            //往右
            if (direct == 0) {
                //不能再往右邊走了
                if (j == n - 1 || A[i][j + 1] != 0) {
                    //下面也訪問過,說明訪問完了,可以直接返回
                    if (A[i + 1][j] != 0) {
                        return A;
                    } else {
                        //往下
                        direct = 1;
                        A[i + 1][j] = count++;
                        i++;
                    }
                } else {
                    //繼續往右
                    A[i][j + 1] = count++;
                    j++;
                }
            } else if (direct == 1) {
                //不能再往下邊走了
                if (i == n - 1 || A[i + 1][j] != 0) {
                    //左邊也訪問過,說明訪問完了,可以直接返回
                    if (A[i][j - 1] != 0) {
                        return A;
                    } else {
                        direct = 2;
                        A[i][j - 1] = count++;
                        j--;
                    }
                } else {
                    //繼續往下
                    A[i + 1][j] = count++;
                    i++;
                }
            } else if (direct == 2) {
                //不能再往左邊走了
                if (j == 0 || A[i][j - 1] != 0) {
                    //上面也訪問過,說明訪問完了,可以直接返回
                    if (A[i - 1][j] != 0) {
                        return A;
                    } else {
                        //往上
                        direct = 3;
                        A[i - 1][j] = count++;
                        i--;
                    }
                } else {
                    //繼續往左
                    A[i][j - 1] = count++;
                    j--;
                }
            } else if (direct == 3) {
                //不能再往上邊走了
                if (i == 0 || A[i - 1][j] != 0) {
                    //右邊也訪問過,說明訪問完了,可以直接返回
                    if (A[i][j + 1] != 0) {
                        return A;
                    } else {
                        direct = 0;
                        A[i][j + 1] = count++;
                        j++;
                    }
                } else {
                    //繼續往上
                    A[i - 1][j] = count++;
                    i--;
                }
            }
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章