我有一个链表,我正在尝试生成所有的排列。
链接列表由ListNode
个对象构成,这些对象只包含一个整数和对下一个ListNode
的引用。
我正在尝试做这样的事情:
public void generatePermutatoins(ListNode head) {
//code that generates permutations
//let's say it finds a permutation and stores the entire list in
//ListNode singlePermutation;
//printList(singlePermutation);
}
我想知道是否还有递归解决方案?不过,我完全坚持任何解决方案。
答案 0 :(得分:1)
是的,如果您正确定义问题,可以轻松递归
您有一个链接列表和对列表的head
的引用。你有一个函数递归地创建头之后所有元素的所有排列
获得结果后,您将检查每个排列,然后在每个位置添加head
,生成最后一个排列。
如果你还没弄明白这就是你的递归函数。以下是Java中的骨架/伪代码,可帮助您入门。 addEachPosition(permutation, node.value);
会在列表
public List<List<Integer>> getPermutations(ListNode currentNode) {
if(currentNode == null) {
return new ArrayList<ListNode>();
}
List<List<Integer>> nextPermutations = getPermutations(currentNode.next);
addToPermutations(currentNode, nextPermutations);
return nextPermutations;
}
public void addToPermutations(ListNode node, List<List<Integer>> permutations) {
for(List<Integer> permutation:permutations) {
addEachPosition(permutation, node.value);
}
}
答案 1 :(得分:0)
这种非递归(迭代)实现可能会有所帮助:Collections2.permutations。