return [] if matrix.length == 0 || matrix[0].length == 0

    ls = []  #返回的数组 
     up, down = 0, matrix.length-1
     left, right = 0, matrix[0].length-1
     while ( up <= matrix.length/2 && left <= matrix[0].length/2) do 
        #向右移动
       (left..right).each{|d|  
         ls << matrix[up][d]
       }
        #向下移动
       (up+1..down).each{|d|  
         ls << matrix[d][right]
       }
        #向左移动
       tps = []
       (left..right-1).each{|d|
         tps << matrix[down][d]
       }
       ls.concat(tps.reverse)

        #向上移动
       tps = []
       (up+1..down-1).each{|d|
         tps << matrix[d][left]
       }
       ls.concat(tps.reverse)
       up += 1
       down -= 1
       left += 1
       right -= 1
     end    
     ls.uniq