Description

n个人站队,他们的编号依次从1到n,要求编号为a的人必须在编号为b的人的左边,但不要求一定相邻,请问共有多少种排法?第二问如果要求a必须在b的左边,并且一定要相邻,请问一共有多少种排法?

给定人数n及两个人的编号ab,请返回一个两个元素的数组,其中两个元素依次为两个问题的答案。保证人数小于等于10。

测试样例:

7,1,2
返回:[2520,720]

Solutions

1. 排列组合

# -*- coding:utf-8 -*-
from math import factorial
class StandInLine:
    def getWays(self, n, a, b):
        return [factorial(n)/2, factorial(n - 1)]

References

  1. 9.3 站队问题