59. Spiral Matrix II
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n =3
, You should return the following matrix:
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ]]
题意:
给定一个整数n,生成一个包含1到n*n所有元素的螺旋形矩阵。
1,二维数组的动态空间分配(int **array大小为m*n): 1)首先分配m个的指针单元: int **array = (int **)malloc( sizeof(int *) * m ); 2)接着分配n个字符的单元: for ( cnt = 0; cnt < n; cnt += 1 ) { array[cnt] = (int *)malloc( sizeof( int ) * n ); }注意: 分配指针单元时sizeof的参数是指针。 2,二维数组动态内存的释放: for ( cnt = 0; cnt < n; cnt += 1 ) { free( (void *)array[cnt] ); } free( (void *)array ); 3,变量含义:定义brow代表从左到右执行的次数,erow代表从右到左执行的次数;bcol代表从下往上读取次数,ecol代表从上往下读取次数。所以有:1)从左往右读取时,必须从bcol列开始读取,递增直到ecol列。2)从右往左读取时,必须从ecol列开始读取,递减直到bcol列。2)从上往下读取时,必须从brow行开始读取,递增直到erow行。4)从下往上读取时,必须从erow行开始读取,递减直到brow行。
其他规则同《[LeetCode]54. Spiral Matrix》
/** * Return an array of arrays. * Note: The returned array must be malloced, assume caller calls free(). */int** generateMatrix(int n) { if ( n <= 0 ) { return NULL; } int **array = (int **)malloc( sizeof( int *) * n ); if ( !array ) { return NULL; } int cnt = 0; for ( cnt = 0; cnt < n; cnt += 1 ) { array[cnt] = (int *)malloc( sizeof( int ) * n ); } int brow = 0; int erow = n - 1; int bcol = 0; int ecol = n - 1; int times = 1; int value = 1; cnt = 0; while ( cnt < n * n ) { if ( times % 4 == 1 ) { int count = bcol; while ( count <= ecol ) { array[brow][count] = value; count += 1; value += 1; } cnt = cnt + count - bcol; brow += 1; } else if ( times % 4 == 2 ) { int count = brow; while ( count <= erow ) { array[count][ecol] = value; count += 1; value += 1; } cnt = cnt + count - brow; ecol -= 1; } else if ( times % 4 == 3 ) { int count = ecol; while ( count >= bcol ) { array[erow][count] = value; count -= 1; value += 1; } cnt = cnt + ecol - count; erow -= 1; } else { int count = erow; while ( count >= brow ) { array[count][bcol] = value; count -= 1; value += 1; } cnt = cnt + erow - count; bcol += 1; } times += 1; } return array;}