lintcode入门篇六
Posted yunxintryyoubest
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,和上述情况相反。
以上是关于lintcode入门篇六的主要内容,如果未能解决你的问题,请参考以下文章