假设我们要实现下一个置换方法,该方法将数字重新排列到字典上数字的下一个更大置换中。如果无法进行这种排列,则此方法会将其重新排列为最低可能的顺序(实际上是按升序排序)。替换必须就位,并且不要使用任何额外的内存。例如,如果“输入”在左栏中,而其相应的输出在右栏中。
1,2,3 → 1,3,2 3,2,1 → 1,2,3 1,1,5 → 1,5,1
让我们看看步骤-
找到:=否,我:=数组的长度– 2
当我> = 0时
如果A [i] <A [i + 1],则发现:= True,并终止循环
使我增加1
如果找到:= false,则对数组A进行排序,
除此以外
m:=从索引i + 1,从A和从当前元素A [i]中找到最大元素索引
交换元素A [i]和A [m]
将所有元素从i + 1反转到A的末尾
让我们看下面的实现以更好地理解-
class Solution(object): def nextPermutation(self, nums): found = False i = len(nums)-2 while i >=0: if nums[i] < nums[i+1]: found =True break i-=1 if not found: nums.sort() else: m = self.findMaxIndex(i+1,nums,nums[i]) nums[i],nums[m] = nums[m],nums[i] nums[i+1:] = nums[i+1:][::-1] return nums def findMaxIndex(self,index,a,curr): ans = -1 index = 0 for i in range(index,len(a)): if a[i]>curr: if ans == -1: ans = curr index = i else: ans = min(ans,a[i]) index = i return index ob1 = Solution()print(ob1.nextPermutation([1,2,5,4,3]))
[1,2,5,4,3]
输出结果
[1, 3, 2, 4, 5]