59. Spiral Matrix II

Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

For example,
Given n = 3,
You should return the following matrix:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
和54.Spiral Matrix類似,解法思路也無新奇,只需要維護(hù)好計數(shù)即可。

public int[][] generateMatrix(int n) {
    if (n <= 0) {
        return new int[0][0];
    }

    int[][] res = new int[n][n];
    int max = n * n;
    int i = 1;
    int cx = 0, cy = 0;
    int rowBegin = 0, rowEnd = n - 1;
    int colBegin = 0, colEnd = n - 1;
    while (i <= max) {
        while (cy <= colEnd) {
            res[cx][cy] = i;
            cy++;
            i++;
        }
        rowBegin--;
        cy--;
        cx++;

        while (cx <= rowEnd) {
            res[cx][cy] = i;
            cx++;
            i++;
        }
        colEnd--;
        cx--;
        cy--;

        while (cy >= colBegin) {
            res[cx][cy] = i;
            cy--;
            i++;
        }
        rowEnd--;
        cy++;
        cx--;

        while (cx >= rowBegin) {
            res[cx][cy] = i;
            cx--;
            i++;
        }
        colBegin--;
        cx++;
        cy++;
    }

    return res;
}

discuss中沒有用cx cy記錄當(dāng)前點的坐標(biāo),代碼清爽很多。

public static int[][] generateMatrix(int n) {
    int[][] ret = new int[n][n];
    int left = 0,top = 0;
    int right = n -1,down = n - 1;
    int count = 1;
    while (left <= right) {
        for (int j = left; j <= right; j ++) {
            ret[top][j] = count++;
        }
        top ++;
        for (int i = top; i <= down; i ++) {
            ret[i][right] = count ++;
        }
        right --;
        for (int j = right; j >= left; j --) {
            ret[down][j] = count ++;
        }
        down --;
        for (int i = down; i >= top; i --) {
            ret[i][left] = count ++;
        }
        left ++;
    }
    return ret;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容