1 回答
TA贡献1854条经验 获得超8个赞
您应该恢复递归的原始状态,否则您会不断混淆给定的参数。函数参数 "strstartind" 仅指示要选择的正确字符,如果原始 "str[]" 未更改,但是您会在以下位置覆盖原始 "str[]":
str[strstartind] = str[i];
str[i] = temp;
这是一个有效的解决方案,可以恢复递归参数:
public class DemoApplicationTests {
public static void main(String args[]) throws Exception {
String str1 = "eat";
int len = str1.length();
char[] str = str1.toCharArray();
recurPerm(str, 0, len);
}
static void recurPerm(char[] str, int strstartind, int sz) {
for (int i = strstartind; i < sz; i++) {
char temp = str[strstartind];
str[strstartind] = str[i];
str[i] = temp;
recurPerm(str, strstartind + 1, sz);
//restore state
str[i] = str[strstartind];
str[strstartind] = temp;
}
if (strstartind >= sz) {
System.out.println(str);
}
return;
}
}
添加回答
举报