#4172. 选择排列的生成
选择排列的生成
当前没有测试数据。
问题描述
设有 n 个整数的集合 {1, 2, 3, …, n},从中取出任意 r 个数进行排列(0 < r < n < 20),编程输出所有的排列方案。请按照字典序输出。
输入格式
- 一行两个整数
n和r,之间用一个空格隔开。
输出格式
- 输出所有排列方案,每个排列占一行,数值之间用空格隔开。
- 输出排列方案后,在最后一行输出所有排列的总数
total。
输入样例
4 2
输出样例
1 2
1 3
1 4
2 1
2 3
2 4
3 1
3 2
3 4
4 1
4 2
4 3
total=12
关键点
- 每次从
{1, 2, ..., n}中选择一个数,确保排列是按字典序生成的。 - 排列的总数是通过公式
P(n, r) = n! / (n - r)!来计算的。
时间复杂度
由于最多会生成所有的 r 元素的排列,时间复杂度为 O(n^r),对于给定的最大值 n=20 和 r=19,这种复杂度是可接受的。