排列组合的四种常见情况

一文搞懂排列组合:4种情况的通用公式

在算法和数学中,经常会遇到这样的问题:

从 n 个不同的元素中选择 m 个,有多少种选择方式?

看似简单,但根据两个条件的不同,会产生 4 种经典情况

  1. 是否考虑顺序
  2. 是否允许重复选择

这两个条件组合起来,就是排列组合中最常见的四类问题。


一张表快速理解

类型 是否考虑顺序 是否允许重复 公式
组合 ❌ 不考虑 ❌ 不允许 C(n,m)
排列 ✅ 考虑 ❌ 不允许 P(n,m)
可重复组合 ❌ 不考虑 ✅ 允许 C(n+m-1,m)
可重复排列 ✅ 考虑 ✅ 允许 n^m

下面逐个分析。


1. 组合:不考虑顺序,不允许重复

场景

从 n 个不同元素中选择 m 个,只关心选中了哪些。

例如:

有 5 个数字:

1
1 2 3 4 5

选择 3 个。

那么:

1
1 2 3

和:

1
3 2 1

认为是同一种。


公式

C(n,m)=n!m!(nm)!C(n,m)=\frac{n!}{m!(n-m)!}

其中:

  • n! 表示阶乘
  • m! 用来去除选中元素内部的排列情况

例如:

C(5,3)=5!3!2!=10C(5,3) = \frac{5!}{3!2!} = 10


2. 排列:考虑顺序,不允许重复

场景

选择出来的元素需要区分位置。

例如:

5个人里面选3个人排队:

1
A B C

和:

1
B A C

属于不同情况。


公式

P(n,m)=n!(nm)!P(n,m)=\frac{n!}{(n-m)!}

计算:

P(5,3)=5×4×3=60P(5,3) = 5\times4\times3 = 60

原因:

第一个位置:

1
5种选择

第二个位置:

1
4种选择

第三个位置:

1
3种选择

3. 可重复组合:不考虑顺序,允许重复

场景

元素可以被多次选择,并且不关心顺序。

例如:

有:

1
苹果 香蕉 橘子

选择两个水果。

允许:

1
2
3
苹果 苹果
苹果 香蕉
香蕉 香蕉

但是:

1
苹果 香蕉

和:

1
香蕉 苹果

算一种。


公式

C(n+m1,m)C(n+m-1,m)

例如:

3种水果选2个:

C(3+21,2)=C(4,2)=6C(3+2-1,2) = C(4,2) = 6

所有情况:

1
2
3
4
5
6
苹果苹果
苹果香蕉
苹果橘子
香蕉香蕉
香蕉橘子
橘子橘子

4. 可重复排列:考虑顺序,允许重复

场景

每个位置都可以重新选择。

例如:

密码:

1
0 1 2 3 4 5 6 7 8 9

生成一个3位密码。

第一位:

1
10种

第二位:

1
10种

第三位:

1
10种

所以:

103=100010^3=1000

通用公式:

nmn^m


如何快速判断?

做题时只问两个问题。


第一个问题:顺序重要吗?

不重要:

例如:

  • 选一个团队
  • 抽几个商品
  • 选择几个元素组成集合

使用:

1
组合

重要:

例如:

  • 排队
  • 密码
  • 比赛排名
  • 座位安排

使用:

1
排列

第二个问题:能重复吗?

不能重复:

每个元素只能使用一次。

例如:

1
从5个人里面选3个人

可以重复:

同一个元素可以多次出现。

例如:

1
生成密码

最终记忆图

1
2
3
4
5
6
7
8
9
10
11
12
                是否允许重复
|
-------------------------
| |
不允许 允许
| |
---------------- ----------------
| | | |
不考虑顺序 考虑顺序 不考虑顺序 考虑顺序

C(n,m) P(n,m) C(n+m-1,m) n^m
组合 排列 可重复组合 可重复排列

总结一句话

不重复时:

  • 不看顺序 → 组合 C(n,m)
  • 看顺序 → 排列 P(n,m)

可重复时:

  • 不看顺序 → C(n+m-1,m)
  • 看顺序 → n^m

掌握这四个公式,基本可以解决绝大多数排列组合问题。