今天的一道头条面试题

有一个H*W的空间,1*1, 1*2, 1*3的砖块,只能横着放,有多少种方法?
时间复杂度要求小于 O(W)

我只优化到O(W)了,求问再怎么优化?
#笔试题目##字节跳动#
全部评论
# coding = utf-8 def mul(m1, m2):     h1, w1 = len(m1), len(m1[0])     h2, w2 = len(m2), len(m2[0])     result = [[0]*w2 for _ in range(h1)]     for i in range(h1):         for j in range(w2):             result[i][j] = sum([m1[i][k]*[v[j] for v in m2][k] for k in range(w1)])     return result def quick(m, n):     result = m     n -= 1     while n:         if n&1:             result = mul(result, m)         m = mul(m, m)         n >>= 1     return result def f(w):     memo = [0] * w     memo[0] = 1     memo[1] = 2     memo[2] = 4     for i in range(3, w):         memo[i] = memo[i-1]+memo[i-2]+memo[i-3]     return memo[-1] param = [[1,1,1], [1,0,0], [0,1,0]] # 初始化 w, h = 10, 4   r = quick(param, w-3) r = mul(r, [[4], [2], [1]])[0][0] print(r)  # 矩阵快速幂方法 # print(f(10))  # 动态规划 total_number = r**h
点赞 回复 分享
发布于 2019-04-24 10:57
H多大啊,是不是固定的啊
点赞 回复 分享
发布于 2019-04-23 22:39
类似斐波那契数列吧
点赞 回复 分享
发布于 2019-04-23 23:14
1*3这个砖块推起来好像很复杂的样子
点赞 回复 分享
发布于 2019-04-23 23:58
当H为1时 就是裴波那契数列题目 得到m种方法,所以最后有m^h种方法???
点赞 回复 分享
发布于 2019-04-24 07:25
最小时间复杂度可以达到 log2N??
点赞 回复 分享
发布于 2019-04-24 07:26
对于f(n)=f(n-1)+f(n-2)+f(n-3)这个可以用构造转移矩阵,然后矩阵快速幂的方法做,可以上网搜斐波那契的矩阵快速幂做法,这个没学过的一般想不到,拿着个考人有点儿。。
点赞 回复 分享
发布于 2019-04-24 08:39

相关推荐

02-19 13:42
门头沟学院 Java
运气爆棚福星高赵:清✌️不用很在意项目,八股算法是重点,八股算法说的过去绝对要您
点赞 评论 收藏
分享
02-18 21:55
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务