由此文 LeetCode 031 我们可以根据一个 list 序列得到它的下一个字典序列,由此得到全排列的实现方法。
没啥说的,直接上代码了。
class Solution(object):
def sortlist(self, nums, right, left):
left += 1
for i in range(right, left):
for j in range(i+1, left):
if nums[i] > nums[j]:
nums[i], nums[j] = nums[j], nums[i]
def nextPermutation(self, nums):
count = 1
while 1:
first = -1
for i in range(-2, -len(nums) - 1, -1):
if nums[i] < nums[i + 1]:
first = i + len(nums)
break
if first != -1:
count += 1
last = None
for i in range(first, len(nums)):
if nums[i] > nums[first] and last == None:
last = i
if nums[i] > nums[first] and nums[i] < nums[last]:
last = i
nums[first], nums[last] = nums[last], nums[first]
self.sortlist(nums, first + 1, len(nums) - 1)
print(nums)
else:
print(count)
break
nums = [1, 4, 3, 2] # 输入
nums.sort()
print(nums)
A = Solution()
A.nextPermutation(nums)