59. 螺旋矩阵 IIC

/**
* 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().
*/
void install(int** a,int* x,int n,int now){
int i=now;//当前行
int j=now;//当前列
for(;j<n;j++){//向右
if(a[i][j]==0){
a[i][j]=(*x)++;
}else{
break;
}
}
i++;
j--;
if(j<0) return;
for(;i<n;i++){//向下
if(a[i][j]==0){
a[i][j]=(*x)++;
}else{
break;
}
}
i--;
j--;
if(i<0) return;
for(;j>=0;j--){//向左
if(a[i][j]==0){
a[i][j]=(*x)++;
}else{
break;
}
}
j++;
i--;
if(j>=n) return;
for(;i>=0;i--){//向上
if(a[i][j]==0){
a[i][j]=(*x)++;
}else{
break;
}
}
}
int** generateMatrix(int n, int* returnSize, int** returnColumnSizes) {
*returnSize=n;
int* columnsizes=(int*)malloc(sizeof(int)*n);
for(int i=0;i<n;i++){
columnsizes[i]=n;
}
*returnColumnSizes=columnsizes;
int** a=(int**)malloc(sizeof(int*)*n);
for(int i=0;i<n;i++) a[i]=(int*)malloc(sizeof(int)*n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
a[i][j]=0;
}
}
int x=1;
for(int i=0;i<n;i++){
if(a[i][i]==0){
install(a,&x,n,i);
}
}
return a;
}
結果:

浙公网安备 33010602011771号