Я создал программу, в которой пользователь вводит набор чисел (в виде строки) и распечатывает следующую перестановку. Если они вводят лексикографически последнюю перестановку, программа должна вывести «Без перестановки», однако мой код все равно распечатывает следующую перестановку (или, вернее, первую), если вводит последнюю.
Любые идеи о том, как решитьthis?
inp = list(map(int,input().split())) # user input
def nextPermutation(nums): # function to check for the next permutation
i = len(nums) - 1
while i > 0 and nums[i] <= nums[i-1]:
i -= 1
if i == 0:
nums.reverse()
else:
j = i
i -= 1
while j < len(nums) and nums[j] > nums[i]:
j += 1
j -= 1
nums[j], nums[i] = nums[i], nums[j]
nums[i+1:] = nums[i+1:][::-1]
if nums: # this should return the next permutation
return '' + " ".join(str(e) for e in nums)
else: # if it has no permutation it should return this
return "No permutation"
print(nextPermutation(inp))
Пример ввода: 3 2 1
Ожидаемый выход: No permutation
Токовый выход: 1 2 3