1. 题目编号
54-螺旋矩阵
59-螺旋矩阵2
2.方法说明
采用四个边界值保存矩阵的边界,并在进行一次操作后改变边界值。
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
3.54题的题目及代码
题目:
给定一个包含 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]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/regular-expression-matching
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码说明:
分别用rowLimit1、rowLimit2、colLimit1 、colLimit2 表示上下左右四个边的边界,并在每一行、每一列遍历完成后改变边界值,并做好边界检查。
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
int rowLimit1, rowLimit2, colLimit1, colLimit2;
int* out;
int i;
*returnSize = 0;
if (matrixSize == 0) {
return out;
}
rowLimit1 = 0;
rowLimit2 = matrixSize - 1;
colLimit1 = 0;
colLimit2 = matrixColSize[0] - 1;
out = (int*)malloc(matrixSize * matrixColSize[0] *sizeof(int));
while (rowLimit1 <= rowLimit2 && colLimit1 <= colLimit2) {
for (i = colLimit1; i <= colLimit2; i++) {
out[*returnSize] = matrix[rowLimit1][i];
(*returnSize)++;
}
rowLimit1++;
if (rowLimit1 > rowLimit2) {
break;
}
for (i = rowLimit1; i <= rowLimit2; i++) {
out[*returnSize] = matrix[i][colLimit2];
(*returnSize)++;
}
colLimit2--;
if (colLimit1 > colLimit2) {
break;
}
for (i = colLimit2; i >= colLimit1; i--) {
out[*returnSize] = matrix[rowLimit2][i];
(*returnSize)++;
}
rowLimit2--;
if (rowLimit1 > rowLimit2) {
break;
}
for (i = rowLimit2; i >= rowLimit1; i--) {
out[*returnSize] = matrix[i][colLimit1];
(*returnSize)++;
}
colLimit1++;
}
return out;
}