每日一道算法题 2020.08.26 回溯法解决递归问题

两道题放到一起说
每日一道算法题 2020.08.26 回溯法解决递归问题_第1张图片
首先是力扣的题 实质上是能转化成树的经典递归题 因为顺序一定 所以思路是先组成HashMap集合 然后把根据输入的字母寻找到路径 在每次搜索后需要删除这次的搜索 所以是回溯 核心是

combination.append(str);                recursion(map,list,digits,index+1,combination);
combination.deleteCharAt(index);

同样每日一道算法题 2020.08.26 回溯法解决递归问题_第2张图片
这道题一样可以用回溯法解决 唯一的区别是输入的方式不同,我的思路是遍历一次字母就删掉该字母

String letter = String.valueOf(str.charAt(i));
StringBuffer stringBuffer = new StringBuffer(str);
stringBuffer.deleteCharAt(i);
stringbuffer.append(letter);

这个地方还被好兄弟提醒了

stringbuffer.append(String.valueOf(str.charAt(i)))

这样写更简洁也更好理解


最后用回溯解决

recursion(list,index+1,stringBuffer.toString(),stringbuffer);
stringbuffer.deleteCharAt(index);

唯一的问题是 如果传入"AA"字符串则可能会有重复输出,所以在最后进行了一次去重,题目上要求了根据字典输出所以用了LinkedHashSet

 Set set = new LinkedHashSet();
 set.addAll(list);
 ArrayList list1 = new ArrayList(set);

你可能感兴趣的:(算法)