给定一个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...
虽然我能做到这一点,但我还没有找到任何基于循环的模式。我已经尝试过二进制模式,并从堆栈或队列满或空开始,但每次都有唯一的语句会抛弃我能看到的任何模式。
答案 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)