python 刷 leetcode 题目(22)

190颠倒二进制位

颠倒给定的 32 位无符号整数的二进制位。

示例:

输入: 43261596
输出: 964176192
解释: 43261596 的二进制表示形式为 00000010100101000001111010011100 ,
     返回 964176192,其二进制表示形式为 00111001011110000010100101000000 

进阶:
如果多次调用这个函数,你将如何优化你的算法?

思路:提供两种方法,一种是利用 python 封装好的函数bin(),可以把十进制数直接转换为二进制,比如bin(10) ,返回字符串类型“0b1010”, 我们只需要把“0b”去掉,利用int直接可以转换得到结果。 第二种,是利用format函数,直接把整数转为32位的二进制,然后反转,再用int函数。

代码如下:

class Solution:
    # @param n, an integer
    # @return an integer
    def reverseBits(self, n):
        
        # #### the first method 
        # b = bin(n)
        # if len(b) < 34:
        #     b = "0b" + "0" * (34 - len(b)) +b[2:]
        # reverse_b = "0b" + b[2:][::-1]
        # return int(reverse_b, 2)
        
        #### the second method
        reverse_b = "{0:032b}".format(n)[::-1]
        return int(reverse_b, 2)
    
        

118杨辉三角

给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。

输入: 5
输出:
[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]

思路: 完全参照别人的代码,觉得写得太好了。

代码如下

附注别人对几行代码的解释: 

解释第3行,这句话的结果是在res的最后面添加一个list,运用map函数:map(function, iterable, …),

lambda是匿名函数,x取值来自res[-1]+[0],其中res[-1]+[0]是取出res的最后一个元素,当然也是一个list,然后在这个list后面加上一个0;y取值来自[0]+res[-1],其中[0]+res[-1])是取出res的最后一个元素,当然也是一个list,然后在这个list前面加上一个0

例如初始res为[[1]],则res[-1]+[0]为[1,0],res[-1]+[0]为[0,1],x+y , 经过map函数得到的list是[1,1],res为[[1],[1,1]]

class Solution(object):
    def generate(self, numRows):
        """
        :type numRows: int
        :rtype: List[List[int]]
        """
        res = [[1]] 
        
        for i in range(1, numRows):
            res.append(list(map(lambda x,y : x+y , res[-1] + [0], [0] + res[-1]))) #3
        return res[:numRows]
  

猜你喜欢

转载自blog.csdn.net/annilingmo/article/details/80652319