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]