题目大意:给一个m行n列的二维数组,要求以螺旋顺序返回所有元素。例如二维数组
[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]将返回[1,2,3,6,9,8,7,4,5]
思路分析:
每次螺旋一圈作为外层循环,
内层循环分为四段,从左往右,从上到下,从右往左,从下到上。先上代码:
注意事项:一是外层循环的判断条件int* spiralOrder(int** matrix, int matrixRowSize, int matrixColSize) { int i,j,k,m,n,p=0,s; s = matrixRowSize * matrixColSize; int *r = (int *)malloc(sizeof(int) * s); for(i=0; i<(matrixRowSize+1)/2 && p<s; i++) { for(j=i; j<matrixColSize-i && p<s; j++) { //从左往右 r[p++] = matrix[i][j]; } for(k=i+1; k<matrixRowSize-i && p<s; k++) { //从上到下 r[p++] = matrix[k][j-1]; } for(m=j-2; m>=i && p<s; m--) { //从右到左 r[p++] = matrix[k-1][m]; } for(n=matrixRowSize-i-2; n>=i+1 && p<s; n--) { //从下到上 r[p++] = matrix[n][m+1]; } } return r; }
i<(matrixRowSize+1)/2 && p<s //也可以把matrixRowSize 换成 matrixColSize
二是要及时判断p的值是否已经达到了最大值,只有当p<matrixRowSize * matrixColSize时才继续循环,否则p超出了范围会出现runtime error。但是每个地方都判断一下好像挺麻烦的,如有人能有更优雅的方式,还望不吝赐教。
Spiral Matrix
最新推荐文章于 2022-10-20 10:12:33 发布