Last updated
Last updated
首先我们搞清楚什么是next permutation。1、2、3的全排列:
可见next permutation就是全排列顺序中的下一个。
再来看一个长一点的例子。有如下的一个数组
下一个排列为:
观察可以发现,再给出的数组中,2之后的数字都是降序排列的,我们把2后面第一个比2大的数字(这里是3)和2交换,然后让3后面的数字升序排列。
交换和逆序两步的顺序不重要
先交换,再逆序:
127431 137421 131247
先逆序,再交换
127431 121347 131247
简单思路的证明:从7开始是降序的,也就是说7 4 3 1不可能通过重新排列构成更大的数字。如果要得到next permutation,那么必须把2这个位置的数字给换掉才行,而且只能换成比2大的数字在才能使next permutation > current permutation.至于换成多大的数字,很明显的需要换成在2后面的数字中刚好比2大的数字。
注意 找兩個索引:最大元素 和 從右往左第一個比 最大元素前一個元素大的元素 两次遍历都是从后往前哦。