【leetcode23】

78. 子集

  1. class Solution:
  2.     def subsets(self, nums: List[int]) -> List[List[int]]:
  3.         res=[]
  4.         path=[]
  5.         def backtrack(index):
  6.             res.append(path[:])
  7.             if index==len(nums):
  8.                 return
  9.             for i in range(index,len(nums)):
  10.                 path.append(nums[i])
  11.                 backtrack(i+1)
  12.                 path.pop()
  13.         backtrack(0)
  14.         return res

本题中终止条件可有可无,for循环会自动结束

回溯模板:

void backtracking(参数) {
    if (终止条件) {
        存放结果;
        return;
    }

    for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
        处理节点;
        backtracking(路径,选择列表); // 递归
        回溯,撤销处理结果
    }
}

发表评论