一、螺旋矩阵
[ 题目描述 ]
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
示例 2:
输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
[ 解题思路 ]
[ 代码实现 ]
public List<Integer> spiralOrder(int[][] matrix) {
if (matrix == null) return null;
List<Integer> res = new ArrayList<>();
if (matrix.length == 0) return res;
int top = 0;
int bottom = matrix.length - 1; // 一共有几行
int left = 0;
int right = matrix[0].length - 1; // 一共有几列
while (top <= bottom && left <= right) {
//top行: left -> right
for (int i = left; i <= right; i++) {
res.add(matrix[top][i]); // 行固定 top这一行 left->right 这几列
}
top++;
//right列: top -> bottom
for (int i = top; i <= bottom; i++) {
res.add(matrix[i][right]); // 列固定 right这一列 top->botton 这几列
}
right--;
// 奇数行、偶数列的时候有问题
if (top > bottom || left > right) break;
//bottom行: right -> left
for (int i = right; i >= left; i--) {
res.add(matrix[bottom][i]); // 行固定 bottom这一列 right -> left 这几行
}
bottom--;
//left列: bottom -> top
for (int i = bottom; i >= top; i--) {
res.add(matrix[i][left]); // 列固定 left这一列 bottom -> top 这几行
}
left++;
}
return res;
}
[ 性能分析 ]
时间复杂度 O(mn)
空间复杂度 O(1)
[ 题目描述 ]
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
[ 解题思路 ]
[ 代码实现 ]
[ 性能分析 ]
[ 题目描述 ]
[ 解题思路 ]
[ 代码实现 ]
[ 性能分析 ]