今天的一道头条面试题

有一个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

相关推荐

醒工硬件:1学校那里把xxxxx学院去了,加了学院看着就不像本校 2简历实习和项目稍微精简一下。字太多,面试官看着累 3第一个实习格式和第二个实习不一样。建议换行 4项目描述太详细了,你快把原理图贴上来了。比如可以这样描述:使用yyyy芯片,使用xx拓扑,使用pwm控制频率与占空比,进行了了mos/电感/变压器选型,实现了xx功能 建议把技术栈和你做的较为有亮点的工作归纳出来 5熟悉正反激这个是真的吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务