题目链接:点击打开链接
void printAll(int n){
int i,j,k;
int temp = 0;
int a[100][100];
//空间复杂度O(n^2),时间复杂度O(n^2)
for(i = 0; i < 2*n - 1; i++){
k = n - 1 < i ?n-1: i;
if(i & 1){
for(j = k; j >= 0; j--)
if(i-j>=0 && i-j < n)
a[i-j][j] = ++temp;
}else{
for(j = k; j >= 0; j--)
if(i-j>=0 && i-j < n)
a[j][i-j] = ++temp;
}
}
for(i = 0; i < n; i++){
for(j = 0; j < n; j++)
printf("%3d ",a[i][j]);
printf("\n");
}
printf("\n");
//空间复杂度O(1),时间复杂度O(n^2)
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
if(i+j <= n)
temp = (i+j+1)*(i+j)/2;
else
temp = (n+1)*n/2 + (n - 1 + 2*n - (i + j))*(i+j-n)/2;
k = n - 1 < i+j ?n-1: i+j;
if((i+j)&1)
temp += (k - j + 1);
else
temp += (k - i + 1);
printf("%3d ",temp);
}
printf("\n");
}
printf("\n");
}