import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
public class Test
...{
public static void main(String[] args) throws Exception
...{
String[] array = new String[] ...{ "1", "2", "3"};
listAll(Arrays.asList(array), "");
}
public static void listAll(List candidate, String prefix)
...{
if (prefix.length() == 3)
...{
System.out.println(prefix);
}
for (int i = 0; i < candidate.size(); i++)
...{
List temp = new LinkedList(candidate);
listAll(temp, prefix + temp.remove(i));
}
}
}
程序是渡来的,借此解释一下全排列。
以3位为例,设待取元素列表为candidate,欲显示String为prefix
先遍历从candidate取数,加于prefix, 则candidate少了一位,prefix多了一位
,如此循环递归,终为所取。
本文通过一个具体的Java程序示例详细解析了全排列算法的工作原理。采用递归方式,通过不断从候选列表中选取元素并将其添加到当前组合中,直至达到指定长度,实现了对输入列表的所有可能排列。
377

被折叠的 条评论
为什么被折叠?



