顺时针打印矩阵 && 翻转单词顺序列

最近两天老是在纠结那个树状数组问题,没来得及刷其他的题目,赶紧把之前还没解决的问题找出来刷一刷压压惊。

NO1:

#Problem Description:
#输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1  2  3  4 
#                                                                              5  6  7  8 
#                                                                              9  10 11 12 
#                                                                              13 14 15 16 
#则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
#

按照大神们的思路,首先输出第一行,然后逆时针旋转矩阵,将列从右往左转置到行,再输出,看下代码:

class Solution:
        def printMatrix(self, matrix):
            result = []
            while (matrix):
                result+=matrix.pop(0)
                if not matrix or not matrix[0]:
                    break
                matrix = self.reverseMatrix(matrix)
            return result
        
        def reverseMatrix(self,matrix):
            r = len(matrix)
            c = len(matrix[0])
            rmatrix = []
            for i in range(c)[::-1]:
                newmat = []
                for j in range(r):
                    newmat.append(matrix[j][i])
                rmatrix.append(newmat)
            return rmatrix

其中先循环列,采用倒序:range(c)[::-1],再循环行,剩下就是递归和输出问题了,较为简单,顺利通过。

突然查看到一位大神的代码被惊艳到了,先来看看:

class Solution2:
        # matrix类型为二维列表,需要返回列表

        def printMatrix(self, matrix):
            return  matrix and list(matrix.pop(0)) + self.printMatrix(zip(*matrix)[::-1])

没错,一行代码,其中有两个地方有点难理解,第一个是return a and b,意思就是如果a为true,则输出b,反之为false,则输出b。后面的部分zip函数就是矩阵的转置,然后

交换上下行。

如此看来用python写程序真是很简洁,但是可读性就有点打折扣了,还是不推荐这种写法。

 

 

NO2:

#题目描述
#牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。
#同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。
#例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,
#正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,
#你能帮助他么?

感觉还是简单的翻转题目,直接用split函数,测试用例还加了空字符验证,所以再加个判断,感觉这样好像失去做这题的意义了

def ReverseSentence(self, s):
        slist = s.split()
        cstr = ""
        for i in range(len(slist)-1,-1,-1):
            cstr = cstr + slist[i]+" "
        if cstr.strip!="":
            return cstr.strip()  
        else:
            return s

不过同样又看到了一个python大神的代码被吓到,同上

class Solution2:
    def ReverseSentence(self, s):
        return " ".join(s.split()[::-1]) if s.strip() != "" else s 

也是一行。

posted @ 2018-09-09 14:28  九层之台起于累土  阅读(208)  评论(0编辑  收藏  举报