dfs 感悟
感悟: 1. 什么时候用排列组合问题? 看看结果有ArrayList? 所求的容器有多个结果值-且各个结果值之间只是顺序,或长度不同,但是来源(存在有显性隐性输入值)都是一样的-- 正是排列组合的根本. 数组, 字符串 2. 关键点: 递归函数里面加入容器, 结果值--操作的元素---不断地操作结果中的值, 输入值, (判断访问过没有—看是否要求重复、位置计数器)。 3. 二叉树的回溯法有单独的模板 5.10 4. //元素没有重复 if (list.contains(nums[i])) { continue; } 5. 元素有重复必须先sort,且要求递增顺序 for (int i = pos; i < nums.length; i++) { //画图得到必须要跟前一个节点的值不同并且不是第一次循环进入的点(不然会空指针异常, 或者同一层次(pos进入)的点,
即同一个递归函数不能跟后面的值一样) if (i != pos && nums[i] == nums[i-1]) { continue; } 6. 元素有重复必须先sort,且答案之一的顺序无要求。 for (int i = 0; i < nums.length; i++) { //保证当前元素递归到下一次 时不再次访问 if (visited[i] == 1) { continue; } //保证兄弟元素重复的在同一层次不再被访问, 取出同一层相同的答案 if (i > 0 && nums[i - 1] == nums[i] && visited[i - 1] == 0) { continue; } 7. 在pos 处一点猫腻 for (int i = start; i < s.length() && i < start + 3; i++) { String item = s.substring(start, i + 1); if (isValid(item)) { 8. 什么时候用subString 和StringBuilder? 有固定的字符串的时候用subString, 如果没有单纯的添加单个字符而非字符串匹配类的问题用sb,
或者在构件好多个单词后,用sb添加拆分符号: 递归很重要 递归过程根据题目要求画图来的