堆叠和排队以打印n个元素

时间:2018-02-21 05:34:22

标签: java stack queue

给定一个n长度的元素集,是否可以创建某种类型的(非递归)循环,它将迭代并打印集合的幂集,只使用1个堆栈和1个队列?

我已经"硬编码" queue.enqueue()stack.push()的问题,并尝试打印出队列以捕获'每个独特的集合:

int[] set = {1,2,3};
for (int aSet : set) {
    stack.push(aSet);
}

queue.printQ(queue);    // empty

queue.enqueue(stack.pop());
queue.printQ(queue);    // '3'

queue.enqueue(stack.pop());
stack.push(queue.dequeue());
queue.printQ(queue);    // '2'
// etc...

虽然我能做到这一点,但我还没有找到任何基于循环的模式。我已经尝试过二进制模式,并从堆栈或队列满或空开始,但每次都有唯一的语句会抛弃我能看到的任何模式。

1 个答案:

答案 0 :(得分:0)

听起来像是一个家庭作业问题。所以这里是使用deque解决Python中的难题。您可以自己将其转换为Java:

from collections import deque

def power_set(s):
    q = deque()
    q.appendleft([])
    for elem in reversed(s):
        while True:
            subset = q.pop()
            q.appendleft([elem] + subset)
            q.appendleft(subset)
            if not subset: break
    return list(q)