LC回溯+动态规划+分治+二叉树hot题

回溯

46. 全排列:不含重复元素

def backtrack():
   if len(path) == len(nums):
        result.append(list(path))
   else:
        for i in range(len(nums)):
          # 剪枝
          if nums[i] not in path:
             path.append(nums[i])
             backtrack()
             path.pop()

47. 全排列 II:包含重复元素

剪枝条件为

如果该元素被选择过 或者 该元素不是第一个元素且在 nums 列表中的上一个元素和该元素相同(要求 nums 是排好序的),则跳过

 def backtrack():
     if len(path) == len(nums):
         result.append(list(path))
     else:
         for i in range(len(nums)):
          # 理解剪枝
          if selected[i] or (i > 0 and nums[i] == nums[i - 1] and not selected[i - 1]):
              continue
          path.append(nums[i])
          selected[i] = True
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值