12
返回列表 发新帖
楼主: drift1981
跳转到指定楼层
上一主题 下一主题
收起左侧

[高频题] 求助一个google的高频电面题目!

🔗
yaran 2019-10-5 15:10:14 | 只看该作者
全局:
SimonLevy 发表于 2019-10-5 06:20
提供个思路,用dp,dp** 表示endwith**,长度为i的string的数量,例如dp00 就是endwith 00,并且长度为i

...

然后把这个凑一下就是dp[i] = dp[i - 1] + dp[i - 2]
回复

使用道具 举报

🔗
tianyug 2019-10-6 10:36:40 | 只看该作者
全局:
我也提供一个思路吧,就算数的

dp的话就是 dp[n] = 2*dp[n-1] - dp[n-3]

可能比较容易理解一点,就是把所有长度为n-1的符合条件的str后面加0或者加1,会得到2*dp[n-1]这么多的str,但是里面有一些是不符合条件的,就把它们减掉,这些不符合条件的str出现三个连续的0或1的地方只会在最后三位,一半是000,另一半是111,一共有dp[n-3]这么多个

算出来的结果和dp[n] = dp[n-1] + dp[n-2]是一样的

写成代码是
def dp(n):
    if n == 0:
        return 1
    elif n == 1:
        return 2
    elif n == 2:
        return 4
    elif n == 3:
        return 6
    else:
        return 2*dp(n-1) - dp(n-3)
回复

使用道具 举报

🔗
 楼主| drift1981 2019-10-6 13:54:33 | 只看该作者
全局:
yiliaobailiao 发表于 2019-10-5 08:12
实在不敢当。没想通,所以想问一下,为什么要加这个check呢?按理说,不会有>n的情况出现的吧。不过我确 ...

看你说的,我又回去重新run了一下。的确是不需要。奇怪,我上次run的时候 stackover flow了,加了以后好了。Anyway,纠正一下,的确是不需要的,😅
回复

使用道具 举报

🔗
 楼主| drift1981 2019-10-6 13:55:14 | 只看该作者
全局:
vanpyz2019 发表于 2019-10-5 08:22
DP:
F[n] = F[n-1] + F[n-2]
F[1] = 2

赞 👍
回复

使用道具 举报

🔗
 楼主| drift1981 2019-10-6 13:56:03 | 只看该作者
全局:
tianyug 发表于 2019-10-6 10:36
我也提供一个思路吧,就算数的

dp的话就是 dp[n] = 2*dp[n-1] - dp[n-3]

赞 👍
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表