问题1
假设有n对左右括号,请求出合法的排列有多少个?合法是指每一个括号都可以找到与之配对的括号,比如n=1时,()是合法的,但是)(为不合法。
给定一个整数n,请返回所求的合法排列数。保证结果在int范围内。
测试样例:
1
返回:1
问题2
n个数进出栈的顺序有多少种?假设栈的容量无限大。
给定一个整数n,请返回所求的进出栈顺序个数。保证结果在int范围内。
测试样例:
1
返回:1
问题3
2n个人排队买票,n个人拿5块钱,n个人拿10块钱,票价是5块钱1张,每个人买一张票,售票员手里没有零钱,问有多少种排队方法让售票员可以顺利卖票。
给定一个整数n,请返回所求的排队方案个数。保证结果在int范围内。
测试样例:
1
返回:1
问题4
求n个无差别的节点构成的二叉树有多少种不同的结构?
给定一个整数n,请返回不同结构的二叉树的个数。保证结果在int范围内。
测试样例:
1
返回:1
问题5
12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?
给定一个偶数n,请返回所求的排列方式个数。保证结果在int范围内。
测试样例:
1
返回:1
class Parenthesis {
public:
int countLegalWays(int n) {
if(n==1)
return 1;
int sum=1;
for(int i=n+2;i<=2*n;++i)
sum*=i;
for(int i=1;i<=n;++i)
sum/=i;
return sum;
}
};
问题6
有n个信封,包含n封信,现在把信拿出来,再装回去,要求每封信不能装回它原来的信封,问有多少种装法?
给定一个整数n,请返回装发个数,为了防止溢出,请返回结果Mod 1000000007的值。保证n的大小小于等于300。
测试样例:
2
返回:1
注意防止溢出
class CombineByMistake {
public:
int countWays(int n) {
if(n==1)
return 0;
if(n==2)
return 1;
long long pre=0;
long long before=1;
long long cur;
for(int i=3;i<=n;++i)
{
cur=(i-1)*(pre+before)%1000000007;
pre=before;
before=cur;
}
return cur;
}
};