Leetcode 54. らせん行列java

2488 ワード

m x n個の要素を含むマトリクス(m行、n列)を指定します.マトリクス内のすべての要素を時計回りの螺旋順に返します.
例1:
  :
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]
  : [1,2,3,6,9,8,7,4,5]

例2:
  :
[
  [1, 2, 3, 4],
  [5, 6, 7, 8],
  [9,10,11,12]
]
  : [1,2,3,4,8,12,11,10,9,5,6,7]

 

/*
  :               ,            
               boolean          false
                    1 ,        
           ,   https://www.2cto.com/kf/201507/418663.html
*/
class Solution {
    public List spiralOrder(int[][] matrix) {
      
        List result = new ArrayList();
        int i = 0 , j =0 ; 
        int  row ,column ;
        if(matrix.length == 0)
        {
            return result ;
        }
        
        row = matrix.length ;
        column = matrix[0].length ;
        
        boolean[][] a = new boolean[row][column] ;
        
        int direct = 0 ; //      0 ,1 ,2,3              
            
        while(i>=0&&i=0)
        {
                if(a[i][j])
                {
                    break ; //        
                }
            result.add(matrix[i][j]) ;
            a[i][j] = true ;

            switch(direct)
                
            {
                case 0 :  
                if(j==column-1||a[i][j+1])
                {
                    i++;//       ,    
                    direct=1 ; //      
                }
                 else
                     j++;//   
                     break ;
                case 1 :  
                    if(i == row-1 ||a[i+1][j])
                    {
                         j--;//           
                         direct=2 ; //    
                    }
                    else
                         i++ ; //   
                         break ;
                case 2 :
                    if(j==0||a[i][j-1])
                    {
                        i-- ;//           
                        direct=3 ;
                    }
                    else
                        j-- ;  //   
                        break ;
                case 3 :
                    if(i==0||a[i-1][j])
                    {
                        j++ ; //          
                        direct=0 ;
                    } 
                    else
                        i--;  //   
                        break ;
            }     
        }  
        return result ;     
    }
}