# 题 1

54. 螺旋矩阵
给你一个 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]
 

提示:

m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100
题解
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize) {
    *returnSize = matrixSize * (*matrixColSize);
    int* arr = (int*)malloc(*returnSize * sizeof(int));
    int num = 0;
    int UP = 0;
    int DOWN = matrixSize - 1;
    int LEFT = 0;
    int RIGHT = *matrixColSize - 1;

    while (LEFT <= RIGHT && UP <= DOWN) {
        for (int i = LEFT; i <= RIGHT && num < *returnSize; i++) {
            arr[num++] = matrix[UP][i];
        }
        UP++;
        for (int i = UP; i <= DOWN && num < *returnSize; i++) {
            arr[num++] = matrix[i][RIGHT];
        }
        RIGHT--;
        for (int i = RIGHT; i >= LEFT && num < *returnSize; i--) {
            arr[num++] = matrix[DOWN][i];
        }
        DOWN--;
        for (int i = DOWN; i >= UP && num < *returnSize; i--) {
            arr[num++] = matrix[i][LEFT];
        }
        LEFT++;
    }
    return arr;
}
//通过设置最上,最下,最左,最右作为边界条件,按照左下右上的顺序,输出到返回数组中,并修改边界,通过判定边界是否重合来决定何时停止循环
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

KagurazakaAsahi 微信支付

微信支付