递归DFS感觉好难理解啊

Posted heracles-mercury

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归DFS感觉好难理解啊相关的知识,希望对你有一定的参考价值。

都说递归是一种易于理解的编码方式,但是感觉并没有那么轻松。

今天刷leetCode遇到一个分割回文串的问题,如下:

给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。

返回 s 所有可能的分割方案。

示例:

输入: "aab"
输出:
[
["aa","b"],
["a","a","b"]
]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-partitioning
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

其中就有运用DFS和回溯的解法

完整代码如下

 

package com.LeeCode;

import java.util.ArrayList;
import java.util.List;

public class VariesPalindrome
List<List<String>>list=new ArrayList<List<String>>();
String s;
public List<List<String>> partition(String s)
//从头到尾递归+回溯。
this.s=s;
//这个是满足的每一个集合
List<String>ll=new ArrayList<String>();
dfs(ll,0);
return list;

public void dfs(List<String>ll,int index)
if(index==s.length())

list.add(new ArrayList<String>(ll));
return;

//i从index开始是因为单个字符也是回文子串
for(int i=index;i<s.length();i++)

//如果是回文
if(isPalindrome(index,i))

//把当前的回文子串s(index,i)加进去
ll.add(s.substring(index,i+1));
dfs(ll,i+1);
//把加进去的回文子串去处。和上面加进去的回文子串是同一个回文子串。
ll.remove(ll.size()-1);




public boolean isPalindrome(int start,int end)
while(start<end)
if(s.charAt(start)!=s.charAt(end))
return false;
start++;
end--;

return true;


public static void main(String[] args)
VariesPalindrome variesPalindrome=new VariesPalindrome();
String jj="abnnss";
System.out.println(variesPalindrome.partition(jj));

以上是关于递归DFS感觉好难理解啊的主要内容,如果未能解决你的问题,请参考以下文章

2018.07.29(搜索)学习DFS算法小记

[dfs] aw1117. 单词接龙(dfs搜索顺序+递归理解+好题)

怎样才能深刻理解递归和回溯?

递归的深度理解

算法学习——DFS(暴力搜索)N皇后问题

递归的理解与应用