46. 全排列
每日几道leetcode刷刷题!
传送门·
题目描述
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
示例 1:
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
代码
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
path = []
result = []
used = [False] * len(nums) #用于记录哪些已经用过了
def backtrack(nums, used):
if len(path) == len(nums):
result.append(path[:])
return
for i in range(len(nums)):
if used[i]: #如果已经用过了,那么跳到下一次遍历
continue
used[i] = True
path.append(nums[i])
backtrack(nums,used)
path.pop()
used[i] = False
backtrack(nums, used)
return result
总结
来源【代码随想录】
47.全排列 II
题目描述
给定一个可包含重复
数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
实例
输入:nums = [1,1,2]
输出:
[[1,1,2],
[1,2,1],
[2,1,1]]
代码
(记得要排序一下 重复的元素)
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
path = []
result = []
used = [False] * len(nums)
def backtrack(nums, used):
if len(path) == len(nums):
result.append(path[:])
for i in range(len(nums)):
if used[i]: #
continue
if i > 0 and nums[i] == nums[i - 1] and not used[i - 1]:
continue
used[i] = True
path.append(nums[i])
backtrack(nums, used)
path.pop()
used[i] = False
nums.sort() #记得要排序!
backtrack(nums, used)
return result