1 Enumeration
也是一种依赖于DFS或者backtracking的类型,属于暴力枚举,题型本质是求笛卡尔积或者说求组合
“字符串构造式 DFS + backtracking”,还有最简单直接又好分析时间复杂度的做法,就是从 String 中每个字符的角度出发,去考虑 “拿 / 不拿”。
StringBuilder 的构造式 DFS + Backtracking,对 “加 / 不加” 的先后顺序是敏感的,下面两题中,同样的代码,都是
先走“不加”的分支
再走“加”的分支
原因在于,这个模板是 “带着当前考虑元素” 的 DFS,在当前函数尾部回溯。当两个 dfs 同处一层,而同层 dfs 只在最尾部才回溯的时候,如果先跑添加的分支,会在后面执行不添加分支时候出错。
否则就一次 dfs 后面跟着一次 sb.setLength(),也可以
体会一下(subset也是能这么写,拿或者不拿)
Last updated