使用Java打印一小组数字的子集

时间:2015-04-02 01:52:47

标签: java recursion nodes subset

我相信我理解这个问题足以满足要求。我能够总结每个子集的内容以产生总数。但我很好奇如何在显示子集的总数之前让它显示每个子集的内容。这是我的代码:

public void theSum(Node currentNode, int total){
    if (currentNode.getNext() == null){
        System.out.println(total;
    }
    else {
        theSum(currentNode.next, total + currentNode.getInt());
        theSum(currentNode.next, total);
    }
}

我尝试放置一些打印语句,但我不太确定如何将这些代码拼凑在一起,以便它自己显示子集,而不会重复。我相信逻辑是有效的,因为它只打印一次总和,并且通过我在纸上的涂鸦判断它打印每个唯一子集的总和。我只是希望能够自己打印子集。我可以用递归的方式完成这个吗?

我们假设我的简单列表是{5,6,7}。假设列表中的每个整数都存储在链表中的连续节点中。以下是我尝试显示子集的方法:

public void theSum(Node currentNode, int total){
        if (currentNode.getNext() == null){
            System.out.println(total);
            System.out.print(currentNode.getData());
        }
        else {
            System.out.print(currentNode.getData());
            theSum(currentNode.next, total + currentNode.getData());
            theSum(currentNode.next, total);
        }
    }

似乎返回的结果有些正确,虽然子集并没有像我希望的那样完全显示,但有一些是不完整或错误的。返回的结果是:

1236 03 034 01 0235 02 033 00 0

这样调用方法:

theSum(list.head.getNext(), 0);

head是一个没有数据的节点。因此head.getNext()返回包含列表中第一项的节点,在此示例中为整数5.第二个参数是初始总计,即0。

感谢您的任何提示。我已经看到一些问题要求关于子集的类似事情。由于看起来我的方法成功地计算了子集和,我只想知道如何准确地(如果它甚至可能)放置一些打印语句,以便我可以在可能的情况下将每个子集与子集的和显示在右边。例如:

5 + 6 + 7 = 18

0 个答案:

没有答案