回溯算法-排列问题
回溯三步曲:
1.递归函数参数和返回值
2.确定终止条件
3.单层递归逻辑
力扣46题
1.递归函数参数和返回值
void backtracking(nums,path,used,result)
2.终止条件
if (path.size==nums.size)
result.push(path)
return;
3.单层递归逻辑
for (i=0;i<=nums.size;i++)
{
if nums[i] not in used:
path.push(nums[i]);
used.push(nums[i]);
backtracking(nums,path,used,result);//递归
path.pop(nums[i]);//回溯
used.pop(nums[i]);
}
由上述伪代码编写的python代码如下:
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
if len(nums)==0:
return
used = []
result = []
path = []
self.backtracking(nums,used,result,path)
return result
def backtracking(self,nums,used,result,path):
if len(path)==len(nums):
result.append(path[:])
return
for i in range(len(nums)):
if nums[i] not in used:
used.append(nums[i])
path.append(nums[i])
self.backtracking(nums,used,result,path)
used.pop()
path.pop()