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