Skip to content

Commit 343a3b4

Browse files
committed
回溯法 5大题型
1排列 全排列 有重复数字的排列 2组合 重复元素组合 3求和 重复元素求和 4子集 重复元素子集 5扩展题型 如ip划分 回文数划分 数字打出字母等。 重点在于:递归前标记元素,每次完整递归结束需要清除标记元素。 判断递归结束条件。 细节问题如list的添加,contains使用等。
1 parent 7ce1e3f commit 343a3b4

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package BackTracking;
2+
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.List;
6+
7+
/**
8+
* Created by 周杰伦 on 2018/4/2.
9+
*/
10+
public class 字符串划分成回文子串 {
11+
public static void main(String[] args) {
12+
System.out.println(Arrays.toString(partition("aab").toArray()));
13+
}
14+
public static List<List<String>> partition(String s) {
15+
List<String> arr = new ArrayList<>();
16+
List<List<String>> list = new ArrayList<>();
17+
backTracking(s, 0, arr, list);
18+
return list;
19+
}
20+
public static void backTracking(String s,int left,List<String> arr, List<List<String>> list) {
21+
if (left == s.length()) {
22+
list.add(new ArrayList<>(arr));
23+
return;
24+
}
25+
for (int i = left;i < s.length();i ++) {
26+
String substr = s.substring(left,i + 1);
27+
if (isHuiWen(substr)) {
28+
arr.add(substr);
29+
backTracking(s,i + 1,arr,list);
30+
arr.remove(arr.size() - 1);
31+
}
32+
}
33+
}
34+
public static boolean isHuiWen(String s) {
35+
if (s == null || s.equals(""))return false;
36+
if (s.length() == 1)return true;
37+
int l = 0,r = s.length() - 1;
38+
while (l < r) {
39+
if (s.charAt(l) != s.charAt(r))return false;
40+
l ++;
41+
r --;
42+
}
43+
return true;
44+
}
45+
}

0 commit comments

Comments
 (0)