lintcode入门篇六

185. 矩阵的之字型遍历

给你一个包含 m x n 个元素的矩阵 (m 行, n 列), 求该矩阵的之字型遍历。

样例

样例 1:
	输入: [[1]]
	输出:  [1]

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

	输出:  [1, 2, 5, 9, 6, 3, 4, 7, 10, 11, 8, 12]
class Solution:
    '''
    1.首先i,j都不能小于0,并且i<len(matrix) and j<len(matrix[0])
    2.一开始是往上右,upright = True
    3.如果是upright = True的话,下一个值就是i-1,j+1,否则i+1,j-1
    4.如果i<0或者j<0,则代表需要转换方向,upright=False或者True:
    如果转换方向,此时的upright =True的话,此时得分情况:
    (1).一种是j在范围内(即j<=len(matrix)-1,那么需要往右边走,j+1,i不变(此时不仅要回退到原来的i和j,而且j需要再加1)
    (2).一种是j出范围(即j==len(matrix)),那么需要往下走,i+1(此时不仅需要回退到原来的i和j,而且i需要再加1)
    如果转换方向,此时的upright =True的话,此时得分情况:
    (1).和上述相反
    (2).和上述相反
    '''
    def printZMatrix(self,matrix):
        upright = True
        res=[]
        i,j=0,0
        IsOut = False
        while True:
            if upright == True:
                ##在此下运行的条件
                while i>=0 and j>=0 and i <= len(matrix)-1 and j<=len(matrix[0])-1:
##终止条件
if i == len(matrix)-1 and j == len(matrix[0])-1: IsOut = True break res.append(matrix[i][j]) print('upright=True:'+str(res[-1])) i = i-1 j = j+1 else: if j == len(matrix[0]): i = i+2 j = j-1 else: i = i+1 upright = False print(upright) if upright == False: print('enter') while i>=0 and j>=0 and i <= len(matrix)-1 and j<=len(matrix[0])-1: if i == len(matrix)-1 and j == len(matrix[0])-1: IsOut = True break res.append(matrix[i][j]) i = i+1 j = j-1 print('upright=False:'+str(res[-1])) else: if (i == len(matrix)): i = i-1 j = j+2 else: j = j+1 upright = True if IsOut == True: res.append(matrix[-1][-1]) break return res

大致解释:(折腾了两小时,终于搞定,略显累赘)

1.写入的顺序是先往右上,在往左下,在往右上,在往左下,依次写入,直到i=len(matrix)  and  j = len(matrix[0])-1。

2.如果upright=True的话,取下一个元素是i-1,j+1

(1).upright=True的时候,如果i<0或者j>len(matrix)-1的时候,说明需要进行转换(即换方向)。

i<0,此时需要往右边走,i和j需要回退到原来的值,并且j需要再加1.

j>len(matrix)-1,此时需要往下走,i和j需要回退到原来的值,并且i需要在加1

(2).upright=False,和上述情况相反。

猜你喜欢

转载自www.cnblogs.com/yunxintryyoubest/p/12406164.html