54. 螺旋矩陣

給你一個 m 行 n 列的矩陣 matrix ,請按照 順時針螺旋順序 ,返回矩陣中的所有元素。

示例 1:

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

示例 2:

輸入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
輸出:[1,2,3,4,8,12,11,10,9,5,6,7]

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/spiral-matrix
著作權(quán)歸領(lǐng)扣網(wǎng)絡所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

解題思路及方法

就硬解,就按這個螺旋思路,順時針加行列。說下代碼部分地方:

if (m == 0 || n == 0) {
    break;
}

上面這里是因為有個例子過不去,超限,如{{1},{2},{3},{4},{5},{6},{7},{8},{9}},所以增加判斷,當m或者n減到0的時候,就不用再循環(huán)了,已經(jīng)螺旋完了。

List<Integer> new_list = new ArrayList<>();
for (int i = 0; i < sum; i++) {
    new_list.add(list.get(i));
}

return new_list;

上面這里是因為按我的方法解出來,遇見示例二以及類似的情況,都會多加幾個數(shù)字,如果沒有上面代碼,示例二輸出:[1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7, 6],多了一個6。
如果數(shù)組為:{{1,2,3,4,5,6,7},{8,9,10,11,12,13,14},{15,16,17,18,19,20,21},{22,23,24,25,26,27,28},{29,30,31,32,33,34,35}},
輸出為:[1, 2, 3, 4, 5, 6, 7, 14, 21, 28, 35, 34, 33, 32, 31, 30, 29, 22, 15, 8, 9, 10, 11, 12, 13, 20, 27, 26, 25, 24, 23, 16, 17, 18, 19, 18, 17],多了17,18。
我也不知道怎么解決,所以就用了笨辦法,因為前面的順序都是對,我只用輸出前面正確的序列就行了,所以就有了以上代碼。

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> list = new ArrayList<>();
        int m = matrix.length;
        int n = matrix[0].length;
        int sum = m * n;
        for (int i = 0; i < m; i++) {
            // 加上行
            for (int j = i; j < n; j++) {
                list.add(matrix[i][j]);
            }
            // 加右列
            for (int k = i + 1; k < m; k++) {
                list.add(matrix[k][n - 1]);
            }
            // 加下行
            for (int r = n - 2; r >= i; r--) {
                list.add(matrix[m - 1][r]);
            }
            // 加左列
            for (int s = m - 2; s >= i + 1; s--) {
                list.add(matrix[s][i]);
            }
            m--;
            n--;
            if (m == 0 || n == 0) {
                break;
            }
        }
        List<Integer> new_list = new ArrayList<>();
        for (int i = 0; i < sum; i++) {
            new_list.add(list.get(i));
        }

        return new_list;
    }
}

結(jié)果如下:
沒想到還不錯,嘻嘻。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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