顺时针打印矩阵的问题

问题如图

img

代码如图

img


img


问题是代码编译输出不了数字,只能输出一个【】。

你这arr指针一直往后移,到最后返回arr时,arr指向数组末尾了。
修改下面几处

if (returnSize == NULL)//
        return NULL;

int *p = (int *)malloc(sizeof(int) * (*matrixColLen) * matrixRowlen);//
int *arr = p;//

return p;

returnSize是要返回的值,而不是传入的参数,所以函数一开始就直接返回NULL了。

int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){

    int row = 0;
    int col = 0;
    int next_row = 0;
    int next_col = 0;
    int *ans;
    int i = 0;
    int total;
    int index = 0;
    
    int direction[4][2] = {
        {0,1},//向右
        {1,0},//向下
        {0,-1},//向左
        {-1,0}//向上
    };

    if(matrix == NULL || matrixSize == 0)
    {
        *returnSize = 0;
        return NULL;
    }

    int bitmap[matrixSize][*matrixColSize];

    total = matrixSize*(*matrixColSize);
    ans = malloc(sizeof(int)*total);
    *returnSize = total;

    memset(bitmap,0,sizeof(bitmap));

    while(i < total)
    {
        ans[i] = matrix[row][col];
        bitmap[row][col] = 1;

        next_row = row + direction[index][0];
        next_col = col + direction[index][1];

        if(next_row < 0 || next_row >= matrixSize || next_col < 0 || next_col >= (*matrixColSize) || bitmap[next_row][next_col])
        {
            index = (index + 1) % 4;
        }

        row += direction[index][0];
        col += direction[index][1];

        i++;
    }

    return ans;

}

这个题目我的思路是:
输入的这一行字符串,先处理为2维数组,1,2,3,4, 检测到数字,就开始往数组里存,检测到数字后,又检测到],列数+1
把字符串转变为2维数组之后,不就是洒洒水了吗?
有用记得采纳呐