题目 1005.Complete Permutation
Description
Generate the complete permutation of 1..N
Input
Each input file contains only one non-negative integer N (0< N < 9)
Output
Output N! Lines, according to lexicographic order.
Sample Input
3
Sample Output
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
想法
一开始想到用递归来写全排列,就课本上的方法,结果才发现输出时最后两个的次序不对。先试了试STL中的next_permutation函数,后面又自己写了个字典序法全排列。这里简述一下字典序法全排列
- 待排列“字符串”:
- 从后往前搜索,直到找到这样的一个数,它的下标为 j,且满足 。此时有:即从P{j+1} 到 P{n},它们是按字典序递减的。
- 再次从后向前搜索,直到找到这样的一个数,它的下标为 k,且满足 。的位置如下:
- 交换和的值,这时候“字符串”为:这时候得到的“字符串”会比原本的“字符串”大,但并不是所有大于“原字符串”中最小的。
- 结合由(2)得到的大小关系,以及 ,可以得到交换后的“字符串”大小关系如下:所以在最后一步中,把 P{j+1}P{j+2}….P_{n} 反转过来。最后得到:这样得到的新“字符串”是大于“原字符串”中最小的。
提交
字典序法全排列
先贴代码
使用STL
|
|
递归全排列,不合要求
|
|