1.
在XxY的方格中,以左上角格子为起点,右下角格子为终点,每次只能向下走或者向右走,请问一共有多少种不同的走法
给定两个正整数int x,int y,请返回走法数目。保证x+y小于等于12。 C(x+y,x)
(同类型:n颗相同的糖果,分给m个人,每人至少一颗,问有多少种分法。给定n和m,请返回方案数,保证n小于等于12,且m小于等于n。
可以当成插隔板问题来看,C(n-1,m-1))
import java.util.*;
public class Robot {
public int countWays(int x, int y) {
// write code here
if (x==1 || y==1){
return 1;
}
return a(x+y-2)/(a(x-1)*a(y-1)) ;
}
public int a(int input){
int res=1;
for(int i=2;i<=input;i++){
res *= i;
}
return res;
}
}
2.卡特兰数相关 C(2n,n)-C(2n,n+1)=1/(n+1)*C(2n,n)
1)假设有n对左右括号,请求出合法的排列有多少个?合法是指每一个括号都可以找到与之配对的括号,比如n=1时,()是合法的,但是)(为不合法。
给定一个整数n,请返回所求的合法排列数。保证结果在int范围内。
2) n个数进出栈的顺序有多少种?假设栈的容量无限大。给定一个整数n,请返回所求的进出栈顺序个数。保证结果在int范围内。
3)2n个人排队买票,n个人拿5块钱,n个人拿10块钱,票价是5块钱1张,每个人买一张票,售票员手里没有零钱,问有多少种排队方法让售票员可以顺利卖票。给定一个整数n,请返回所求的排队方案个数。保证结果在int范围内。
import java.util.*;
public class Parenthesis {
public int countLegalWays(int n) {
// write code here
int A=1;
int B=1;
for(int i = 2;i<=n;i++){
A *= i ;
}
for(int j=n+2;j<=2*n;j++){
B *= j;
}
return B/A;
}
}
…………