每次让当前递归来到的层数的第一个元素与后面的元素进行交换,然后再递归,知道不能递归为止,该题主要是用递归分叉思想
第一次代码如下,感觉不能算递归,因为老想着先走到树叶, 然后从树叶往树根回收每个过程的结果
List<String> arrangeStr(String str) {
if (null == str || "" == str ) {
return null;
}
List<String> list = new ArrayList<>(50);
doArrangeStr(str, list, 0);
return list;
}
void doArrangeStr(String str, List<String> list, int level) {
if (level == str.length() -1) {
list.add(str);
return;
}
int next = level;
while (next < str.length()) {
doArrangeStr(swap(level, next, str.toCharArray()), list, level + 1);
next++;
}
}
private String swap(int i, int j, char[] cs) {
char tmp = cs[i];
cs[i] = cs[j];
cs[j] = tmp;
return String.valueOf(cs);
}
第二次代码就够递归了
void arrangeStr(String str) {
if (null == str || "" == str ) {
return;
}
doArrangeStr(str, 0);
}
void doArrangeStr(String str, int level) {
if (level == str.length() - 1) {
System.out.println(str);
return;
}
int next = level;
while (next < str.length()) {
str = swap(level, next, str.toCharArray());
doArrangeStr(str, level + 1);
str = swap(level, next, str.toCharArray());
next++;
}
}