卡特兰数从下标0开始:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
1 | 1 | 2 | 5 | 14 | 42 | 132 | 429 | 1430 | 4862 | 16796 |
满足两个递推式(其实有四个,这里就写两个比较简单的)
1:f(n)=f(0)*f(n-1)+f(1)*f(n-2)+f(2)*f(n-3)+······+f(n-1)*f(0) (n>=2)。
2:f(n)=f(n-1)*(4*n-2)/(n+1)。
说了这么多该解释它为什么重要了:
可以求出栈序列种数、凸多边形三角划分、给定节点组成二叉搜索树、n对括号正确匹配数目等等,所以看到这些文字,请先通过自己手算算出f(0)到f(4),直接卡特兰数秒了。
import java.util.Scanner;
class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int x1 = 1;
for (int i = 2; i <= n; i++) {
int t = x1 * (4 * i - 2) / (i + 1);
x1 = t;
}
System.out.println(x1);
}
}