您的位置:首页 > 编程语言 > Java开发

算法:螺旋矩阵 I

2018-01-13 00:52 211 查看


问题

给定一个包含 m x n 个要素的矩阵,(m 行, n 列),按照螺旋顺序,返回该矩阵中的所有要素。


样例

给定如下矩阵:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]


应返回 [1,2,3,6,9,8,7,4,5]。


思路

思路比较普通,就是螺旋遍历。


实现

private static List<Integer> spiralOrder(int[][] matrix) {
// write your code here
if (matrix.length == 0 || matrix[0].length == 0) {
return null;
}
// 遍历当前行的首位置
int lineStart = 0;
// 遍历当前行的末位置
int lineEnd = matrix[0].length;
// 遍历当前列的首位置
int columnStart = 0;
// 遍历当前列的末位置
int columnEnd = matrix.length;
// 创建结果队列
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;
}


如果文章对你有帮助的话,不要忘记打上小编哟~

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息