本題相較于螺旋矩陣II的不同之處是:螺旋矩陣II的矩陣是n行n列的方陣,而本題的矩陣并不一定是方陣。所以在遵循循環不變量原則遍歷完矩陣后,還會有一行或者一列沒有遍歷。
1、行多列少(多一列沒遍歷)
2、行少列多(多一行沒遍歷)
對于多出來的一行或者一列,要在遍歷完每一個整圈之后,單獨處理。
class Solution {
public : vector< int > spiralOrder ( vector< vector< int >> & matrix) { int width = matrix[ 0 ] . size ( ) ; int height = matrix. size ( ) ; int times= min ( width/ 2 , height/ 2 ) ; vector< int > result; int startX; int startY; for ( int i= 0 ; i< times; i++ ) { startX= i; startY= i; for ( ; startY< width- i- 1 ; startY++ ) { result. push_back ( matrix[ startX] [ startY] ) ; } for ( ; startX< height- i- 1 ; startX++ ) { result. push_back ( matrix[ startX] [ startY] ) ; } for ( ; startY> i; startY-- ) { result. push_back ( matrix[ startX] [ startY] ) ; } for ( ; startX> i; startX-- ) { result. push_back ( matrix[ startX] [ startY] ) ; } } if ( width> height) { if ( height% 2 != 0 ) { startX = height/ 2 ; startY = height/ 2 ; for ( ; startY< width- height/ 2 ; startY++ ) { result. push_back ( matrix[ startX] [ startY] ) ; } } } else { if ( width% 2 != 0 ) { startX = width/ 2 ; startY = width/ 2 ; for ( ; startX< height- width/ 2 ; startX++ ) { result. push_back ( matrix[ startX] [ startY] ) ; } } } return result; }
} ;