去重问题
使用used数组来标记是否使用过该元素。
子集2
如果把 子集问题、组合问题、分割问题都抽象为一棵树的话,那么组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点!
而子集也是一种组合问题,它的集合是无序,既然是无序,取过的元素不会重复取,写回溯算法的时候,for就要从startIndex开始,而不是从0开始。
那什么时候从0开始呢?等到计算排列问题时就会从0开始。
去重分为两种,树层去重和树枝去重。例题如下
全排列2
used[i-1]来判断是哪一种,是true,说明上一个使用过来,在一个树枝上,这个判断去重的条件里有一个nums[i] == nums[i-1]这个是前提,而如果是false,但是依然和上一个元素相同,则说明这是在一个树层上。同样continue去重。