給你一個 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é)果如下:
沒想到還不錯,嘻嘻。
