【算法】卡特兰数问题(BST排列个数,矩阵乘法,算数加括号,排队等)

卡特兰数当年大二时候就知道了其在行走路线问题上面的应用,后来发现其还有更多的应用场景,而且最近做LeetCode也碰见了不少这样的问题,特此总结一番。

LeetCode上跟卡特兰数相关的问题有如下四道:
96. Unique Binary Search Trees
95. Unique Binary Search Trees II
这两道题题干差不多,就是1~n总共n个数,将其构建成一个BST数,问总共有多少种不同的构建方法(96题),输出所有情况(95题)

241. Different Ways to Add Parentheses
给一个运算公式如:2-1-1,将括号加到其中,并输出所有可能加括号后的结果,如上面这个就输出:[2,0] ( 解释:(2-(1-1)) = 2,((2-1)-1) = 0)

312.Burst Balloons
一排气球,每个气球上面都有一个数字nums,扎破一个气球i之后,得到nums[i-1]*nums[i]*nums[i+1],问怎么个扎破顺序使得最后得到的总和最大。

这些题背后的思想或者用法都跟卡特兰数有关。对于卡特兰数的问题,总结如下:

  1. 输出所有情况的问题:95,241两道题。一定需要用到递归,是一个卡特兰数级别的复杂度算法。
  2. 输出一个最值结果,如最大最小:312题。因为卡特兰数,用递归的时候会有大量的重复情况,这种情况下一定需要用到动态规划。而卡特兰数相关问题的动态规划,一定是一个 O(n3) 的算法。
  3. 还有最简单的一种情况,就是输出情况个数:95题。这种情况下,就可以直接套用卡特兰数的通项公式。

找出所有情况的问题

如上所示,要找出所有情况,一定是用到了递归。

对于95题

    vector<TreeNode*> generateT(int i,int j){
        
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值