边界处理
左闭右开 寻找到循环不变量
loop转圈次数 控制循环
奇数中间最后加
/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *returnColumnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/
int** generateMatrix(int n, int* returnSize, int** returnColumnSizes){
int **nums = (int **) malloc(sizeof(int *)*n);//直接申请二维数组是否可行?
(*returnColumnSizes)=(int *) malloc (sizeof(int)*n);
*returnSize =n;
int i,j,p,startindex,endindex,count,loop;
count = endindex=1;
p=startindex =0;
loop=n/2;
for(p=0;p<n;p++)
{
(*returnColumnSizes)[p] = n;
nums[p] = malloc(sizeof(int) * n);
}
while(loop--)
{
for(j=startindex;j<n-endindex;j++)//j【0->n-1】
nums[startindex][j] = count++;
for(i=startindex;i<n-endindex;i++)//i[0->n-1] j=n-1
nums[i][j] = count++;
for( ;j>startindex;j--) //i=n-1 j=n-1 ->0
nums[i][j] = count++;
for(;i>startindex;i--) // j=0 i=n-1->0
nums[i][j] = count++;
startindex++;
endindex++;
}
if(n%2)
{
nums[n/2][n/2]=count;
}
return nums;
}