Spiral Matrix

来源:互联网 发布:百度大数据预测双色球 编辑:程序博客网 时间:2024/06/07 00:32

题目大意:给一个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。但是每个地方都判断一下好像挺麻烦的,如有人能有更优雅的方式,还望不吝赐教。

0 0
原创粉丝点击