您好,登錄后才能下訂單哦!
54. Spiral Matrix
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
You should return [1,2,3,6,9,8,7,4,5]
.
題意:
根據給定的m*n矩陣。返回螺旋排序后的一維數組。
1 2 3 4 5 6 7 8 9 螺旋排序后的結果為:1,2,3,6,9,8,7,4,5 由此可知讀取共分四個方向,而且是四個方向的輪回: 1)從左到右(橫坐標不變,縱坐標逐步加一)。讀取結果為:1 2 3 2)從上到下(縱坐標不變,橫坐標逐步加matrixColSize)。讀取結果為:6 9 3)從右往左(橫坐標不變,縱坐標逐步減一)讀取結果為:8 7 4)從下往上(縱坐標不變,橫坐標逐步減matrixColSize)。讀取結果為:4 定義brow代表從左到右執行的次數,erow代表從右到左執行的次數;bcol代表從下往上讀取次數,ecol代表從上往下讀取次數。所以有: 1)從左往右讀取時,必須從bcol列開始讀取,遞增直到ecol列。 2)從右往左讀取時,必須從ecol列開始讀取,遞減直到bcol列。 2)從上往下讀取時,必須從brow行開始讀取,遞增直到erow行。 4)從下往上讀取時,必須從erow行開始讀取,遞減直到brow行。
/** * Note: The returned array must be malloced, assume caller calls free(). */ int* spiralOrder(int** matrix, int matrixRowSize, int matrixColSize) { if ( !matrix ) { return NULL; } int *dest = ( int *)malloc( sizeof(int) * matrixRowSize * matrixColSize + 1 ); if ( !dest ) { return NULL; } int times = 1; int numbers = 0; int brow = 0; int erow = matrixRowSize - 1; int bcol = 0; int ecol = matrixColSize - 1; int index = 0; while ( numbers < matrixRowSize * matrixColSize ) { if ( times % 4 == 1 ) { int count = bcol; while ( count <= ecol ) { *( dest + index ) = matrix[brow][count]; count++; index++; } numbers = numbers + count - bcol; brow += 1; } else if ( times % 4 == 2 ) { int count = brow; while ( count <= erow ) { *( dest + index ) = matrix[count][ecol]; count += 1; index++; } numbers = numbers + count - brow; ecol -= 1; } else if ( times % 4 == 3 ) { int count = ecol; while ( count >= bcol ) { *( dest + index ) = matrix[erow][count]; count -= 1; index++; } numbers = numbers + ecol - count; erow -= 1; } else { int count = erow; while ( count >= brow ) { *( dest + index ) = matrix[count][bcol]; count -= 1; index++; } numbers = numbers + erow - count; bcol += 1; } times += 1; } *( dest + index ) = '\0'; return dest; }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。