美团面试的两道算法题

美团的两道算法题

前天去美团面试,一面和二面问了各问了一道算法题,博主在这里和大家分享一下。

1.二叉树想必大家都了解,对于只有一个节点的二叉树,只会有一种结构,对于有两个节点的二叉树,那么会有2种可能的结构,那么问题来了,对于有n个节点的二叉树,一共有几种可能的情况?

当时直接就想列一下3,4,5个节点分别有多少种可能,然后看能不能找到规律,可是当去遍历4个节点时,发现遍历不住了,就放弃了。然后灵机一动,发现对于n个节点的二叉树,去掉根节点之后,会出现2个种情况。
第一种
一种是变成一颗n-1个节点的二叉树,这种情况存在两种可能。
第二种
另一种情况是,会变成一个a个节点的二叉树和一个b个节点的二叉树,a+b=n-1。
这样很容易列出递推公式,问题就引刃而解了。
[Math Processing Error]
上面公式可以优化一下,我们设[Math Processing Error],这样可以优化为
[Math Processing Error]

2.这个题目感觉挺新颖的,大意是我们令a-z对应数字1-26,这样我发送给你一串数字串比如123,然后进行解析会有abc,lc,aw这3种情况,然后你输出3表示有3种可能。那么问题就来了,我传给你一串数字串[Math Processing Error],然后你告诉我有多少种可能的情况。

这题目很明显是用动态规划来做,最开始我想法是用[Math Processing Error]来表示[Math Processing Error]的串有多少种可能性,那么递推公式为
[Math Processing Error]

当时以为就解决了,可是发现在对123进行验证的时候发现有4种情况,最后发现原来是1,2,3这种情况重复了。简直心碎啊,当时时间紧迫,没有容我三思。不过面试完了之后,我继续研究这个问题,当天晚上就想出来了。用[Math Processing Error]表示[Math Processing Error]子串有多少种可能的表示,我们可以发现,对于[Math Processing Error]来说,[Math Processing Error]无非就是在后面加了一个数字[Math Processing Error],当[Math Processing Error]不能构成一个1-26的数字时,那么其实[Math Processing Error],而当可以构成1-26的数字时,[Math Processing Error].这样递推公式就是
[Math Processing Error]

    原文作者:yuderbin1
    原文地址: https://blog.csdn.net/yuderbin1/article/details/44804729
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞