54. Spiral Matrix 【M】【82】

来源:互联网 发布:水利计价软件 编辑:程序博客网 时间:2024/05/17 06:08


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].


Subscribe to see which companies asked this question

其实本质上就是个状态机,按照四个方向转换状态,然后进行处理


class Solution(object):    def spiralOrder(self, matrix):                        m = matrix                if not m:            return []                    row = len(m)        col = len(m[0])        res = []                if row == 1:            return m[0]        if col == 1:            for i in m:                res += i[0],            return res                d = 'r'        v = []        count = 0                for i in xrange(len(m)):            v += [0] * len(m[0]),            count += len(m[0])            for j in xrange(len(m[0])):                v[i][j] = 0                res = []        i,j = 0,0        while count > 0:            #print res            if d =='r':                k = j                while k < col:                    if v[i][k] == 1:                        j = k - 1                        break                    res += m[i][k],                    v[i][k] = 1                    count -= 1                    k += 1                if j != k-1:                    j = col - 1                i += 1                d = 'd'                #print res,v,d,count            elif d == 'd':                k = i                while k < row:                    if v[k][j] == 1:                        i = k - 1                        break                    res += m[k][j],                    v[k][j] = 1                    count -= 1                    k += 1                    # print res,k,d                if i != k-1:                    i = row - 1                j -= 1                d = 'l'            elif d == 'l':                #print 'd callled'                k = j                while k >= 0:                    if v[i][k] == 1:                        # print res                        j = k + 1                        break                    res += m[i][k],                    v[i][k] = 1                    count -= 1                    k -= 1                if j != k+1:                    j = 0                i -= 1                d = 'u'            elif d == 'u':                k = i                while k >= 0:                    if v[k][j] == 1:                        i = k + 1                        break                    res += m[k][j],                    v[k][j] = 1                    count -= 1                    k -= 1                if i != k+1:                    i = 1                j += 1                d = 'r'                return res        """        :type matrix: List[List[int]]        :rtype: List[int]        """        


0 0
原创粉丝点击