問(wèn)題
給定一個(gè)包含 m x n 個(gè)要素的矩陣,(m 行, n 列)侣夷,按照螺旋順序横朋,返回該矩陣中的所有要素。
樣例
給定如下矩陣:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
應(yīng)返回 [1,2,3,6,9,8,7,4,5]百拓。
思路
思路比較普通琴锭,就是螺旋遍歷。
實(shí)現(xiàn)
private static List<Integer> spiralOrder(int[][] matrix) {
// write your code here
if (matrix.length == 0 || matrix[0].length == 0) {
return null;
}
// 遍歷當(dāng)前行的首位置
int lineStart = 0;
// 遍歷當(dāng)前行的末位置
int lineEnd = matrix[0].length;
// 遍歷當(dāng)前列的首位置
int columnStart = 0;
// 遍歷當(dāng)前列的末位置
int columnEnd = matrix.length;
// 創(chuàng)建結(jié)果隊(duì)列
List<Integer> list = new LinkedList<>();
// 遍歷
int flag = 0;
while (list.size() < matrix.length * matrix[0].length) {
if (flag == 0) {
for (int i = lineStart; i < lineEnd; i++) {
list.add(matrix[columnStart][i]);
}
flag++;
columnStart++;
} else if (flag == 1) {
for (int i = columnStart; i < columnEnd; i++) {
list.add(matrix[i][lineEnd - 1]);
}
lineEnd--;
flag++;
} else if (flag == 2) {
for (int i = lineEnd; i > lineStart; i--) {
list.add(matrix[columnEnd - 1][i - 1]);
}
flag++;
columnEnd--;
} else if (flag == 3) {
for (int i = columnEnd; i > columnStart; i--) {
list.add(matrix[i - 1][lineStart]);
}
flag -= 3;
lineStart++;
}
}
return list;
}
如果文章對(duì)你有幫助的話衙传,不要忘記打上小編喲~