#4172. 选择排列的生成

选择排列的生成

当前没有测试数据。

问题描述

设有 n 个整数的集合 {1, 2, 3, …, n},从中取出任意 r 个数进行排列(0 < r < n < 20),编程输出所有的排列方案。请按照字典序输出。

输入格式

  • 一行两个整数 nr,之间用一个空格隔开。

输出格式

  • 输出所有排列方案,每个排列占一行,数值之间用空格隔开。
  • 输出排列方案后,在最后一行输出所有排列的总数 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=20r=19,这种复杂度是可接受的。