问题如图
代码如图
你这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维数组之后,不就是洒洒水了吗?
有用记得采纳呐