算法 1:
递归
数组 的全排列,等价于全排列与可能的取值组合得到。
算法 2:
计算一个排列 按字典升序排列的紧邻下一个排列
为了获取一个排列的下一个排列,应对其中一个子序列做调整,使原排列变大为紧邻的下一个排列。假设下一个排列为,。可知, 即只应对子序列 做调整,使其变为紧邻的下一个排列。
为使下一个排列与当前排列变化最小,则子序列 应满足如下条件: 是所有以开头,元素为 组成的排列中,最大的一个。则有如下约束:。 通过如下方式获得子序列紧邻的下一个排列:从 中寻找第一个大于 的数字, 交换,得到。 新得到的序列应为以开头的最大序列。可知交换后的子序列 仍为降序,则需要对 进行翻转操作,使其变为降序序列。
网友评论