https://leetcode.com/problems/permutations/description/
Input: [1,2,3] Output: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
import copy
class Solution(object):
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
if len(nums) == 0:
return []
res = []
nums.sort()
res.append(copy.copy(nums))
while True:
first = -1
for i in range(len(nums) - 1, 0, -1):
if nums[i - 1] < nums[i]:
first = i - 1
break
if first < 0:
break
min_val = nums[first + 1]
last = first + 1
for i in range(len(nums) - 1, first, -1):
if nums[i] > nums[first] and nums[i] < min_val:
min_val = nums[i]
last = i
nums[first], nums[last] = nums[last], nums[first]
nums[first + 1:] = sorted(nums[first + 1:])
res.append(copy.copy(nums))
return res