n個人站隊脐雪,他們的編號依次從1到n详幽,要求編號為a的人必須在編號為b的人的左邊筛欢,但不要求一定相鄰,請問共有多少種排法唇聘?第二問如果要求a必須在b的左邊版姑,并且一定要相鄰,請問一共有多少種排法迟郎?
給定人數(shù)n及兩個人的編號a和b剥险,請返回一個兩個元素的數(shù)組,其中兩個元素依次為兩個問題的答案宪肖。保證人數(shù)小于等于10表制。
測試樣例:
輸入:7,1,2
返回:[2520,720]
// 還有另外一種解法,先全排列控乾,a不是在b左邊就是在b右邊么介,且這兩個的數(shù)量相同,所以第一問為:n! / 2蜕衡,第二問則是把a(bǔ)b捆綁壤短,當(dāng)做一個人,然后全排列
class StandInLine {
public:
int factorial(int n)
{
if(n == 0) return 1;
return n*factorial(n-1);
}
int permutation(int i, int j)
{
return factorial(i) / factorial(i - j);
}
int combination(int i, int j)
{
return permutation(i, j) / factorial(j);
}
vector<int> getWays(int n, int a, int b) {
// write code here
vector<int> res(2, 0);
res[0] = factorial(n-2) * combination(n, 2);
res[1] = factorial(n-1);
return res;
}
};