我在Geeksforgeeks上阅读下面的代码,但是我无法理解它的工作原理!如果有人可以用图片说明。那简直太好了!
这是代码:
static void swap(char a[], int l, int r) {
char temp = a[l];
a[l] = a[r];
a[r] = temp;
}
static void permute(char a[], int l, int r) {
if (l == r)
System.out.println(getString(a));
else {
for (int i = l; i <= r; i++) {
swap(a, l, i);
permute(a, l + 1, r);
swap(a, l, i); // backtrack
}
}
}
最佳答案
我看不到您感到困惑的地方:您提供的图片可以很清楚地向我解释。 :-)
终止条件(图表的底部行,2个红色和1个绿色项目):
如果列表中只剩下一个要考虑的元素,则无处可换。排列完成。 返回
除此以外 ...
对于数组中剩余的每个项目,将该位置交换到最左侧的可用位置。向右移动“固定”指针一点,然后在数组的其余部分调用例程。
整个,这简单地沿着数组走了:依次选择每个项目作为第一个位置;依次挑选每个剩余的物品; ...继续进行到列表末尾。
这能为您清除所有内容吗?
关于java - 使用回溯算法对字符串进行排列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35470605/