39. 组合总和
文档和视频讲解:代码随想录(programmercarl.com)
状态:ac
用时:1h
思路:常规的回溯题,需要用一个path存放每次选择的数组元素。
代码:
注:对数组排序后,方便剪枝。当前sum加上选择的元素如果大于target,该元素及其以后的元素和sum的和都会大于target,因此可以直接剪去。
40.组合总和II
文档和视频讲解:代码随想录(programmercarl.com)
状态:未ac
用时:1h
思路:剪枝需要去重,但是有两种重复,一种是树层重复,一种是树枝去重。需要保证树层不重复,而树枝可以重复。此时 cur-1 == cur 是用于判定当前元素是否和之前元素相同的语句。这个语句就能砍掉树层重复。可是问题来了,如果把所有当前与之前一个元素相同的都砍掉,那么树枝重复的情况也会消失。比如此时start是1,而start-1前一个也是1,start-1此时代表上一层选择的节点,只用cur-1 == cur会导致删除树枝重复。因此要加上i > start。当然,这还能保证数组不会越界。
代码:
131.分割回文串
文档和视频讲解:代码随想录(programmercarl.com)
状态:未ac
用时:1h
思路:切割问题类似组合问题,也是可以用树来表示的。递归循环中,用start-i表示切割出来的字符串即可,切割出来的字符串不是回文串的话就不进行递归和回溯。中止条件就是start大于等于字符串长度。
代码: