【发布时间】:2017-01-13 14:04:13
【问题描述】:
给定n轮,以堆栈为主要策略,将所有可能的排列打印到剪刀石头布上。
我曾经知道如何做到这一点,但是在一段时间没有锻炼后我就陷入了困境。
有人可以提供有关如何填充堆栈的有用提示吗?
我知道 n 个输入有 3^n 个输出。
对于 n = 1,预期答案是 3。可能的解决方案是:
def rps(n)
stack = []
answer = []
if n > 0
stack.push([r,p,s])
n -= 1
while !stack.isEmpty()
array = stack.pop();
forEach elem in array
// I still can't figure out where to go from here!!
我知道在递归解决方案中,n=1 时会变为 r,p,s
对于 n=2,答案会附加 rr, rp, rs, pr, pp, ps, sr, sp, ss
对于 n=3,它将是 rrr、rrp、rrs、rpr 等...
【问题讨论】:
-
您可以添加您当前的方法吗?这对我们来说将是一个很好的起点。
-
我知道我应该有一个堆栈和一个while循环。堆栈最初是空的,我不确定要推入堆栈以开始。假设 n = 3,我不确定我是否开始 1. push [] 2. push ['r','p',s'] 3. concatenating ['r','p','s'] 4 . 将 3 推入堆栈。我知道并且已经完成了递归解决方案,但它并不能很好地适应我。我觉得我这样做是出于记忆,而不是真正掌握逻辑或培养强烈的直觉。
-
如果你已经准备好你的代码,那么插入和取出逻辑和解释会容易得多。如果没有,请在您的问题中添加伪代码或类似内容(不要评论)
-
当然,我会试一试。老实说,我觉得我在一个路障。我不知道从哪里开始,但我会尝试输入我的想法。
-
是的,请这样做,这有助于更好地理解问题。你也可以举一些例子吗?例如 4 轮如何运作?