前言
正如前面我们所提到的, 回溯算法的本质是树形结构问题, 即所有的回溯算法问题都可以用树形结构来分析!例如排列问题, 每一个“空”应该放入的数就是树形结构中的每一层中的节点, 如[1, 2, 3]的排列, 第一个放入1(相当于树形结构第一层), 那么第二层只能放入2, 3
再来看解题步骤:
- 确认backTracking的参数: 不同的题其所需要的参数是不同的, 像之前的题, 有的需要元素组的索引以记录开始访问的位置, 有的则不需要;
- 终止条件: 什么时候拿到结果就可以返回
- 确定这一层需要处理的值: 用树形结构分析, 确定这一层应该要处理的值。 然后就是如何避免重复的问题, 一般来说是通过“只考虑后面的”
例题:复原IP地址
题目描述:
有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 '.' 来形成。你不能重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案