方法一:设定边界
package com. hc. ArrayAndString ;
public class Offer29 {
public int [ ] spiralOrder ( int [ ] [ ] matrix) {
if ( matrix. length == 0 )
return new int [ 0 ] ;
int left = 0 , right = matrix[ 0 ] . length - 1 , top = 0 , below = matrix. length - 1 , level = 0 ;
int [ ] res = new int [ ( right + 1 ) * ( below + 1 ) ] ;
while ( true ) {
for ( int i = left; i <= right; i++ )
res[ level++ ] = matrix[ top] [ i] ;
if ( ++ top > below)
break ;
for ( int i = top; i <= below; i++ )
res[ level++ ] = matrix[ i] [ right] ;
if ( left > -- right)
break ;
for ( int i = right; i >= left; i-- )
res[ level++ ] = matrix[ below] [ i] ;
if ( top > -- below)
break ;
for ( int i = below; i >= top; i-- )
res[ level++ ] = matrix[ i] [ left] ;
if ( ++ left > right)
break ;
}
return res;
}
}
class TestOffer29 {
public static void main ( String [ ] args) {
Offer29 offer29 = new Offer29 ( ) ;
int [ ] [ ] matrix = { { 1 , 2 , 3 } , { 4 , 5 , 6 } , { 7 , 8 , 9 } } ;
int [ ] res = offer29. spiralOrder ( matrix) ;
for ( int i : res)
System . out. println ( i) ;
}
}