面试中给了我以下问题:
给定一个N步的楼梯,每次可以上1或2步。从底部到顶部输出所有可能的方式。
例如:
N = 3 Output : 1 1 1 1 2 2 1
面试时,我只是说要使用动态编程。
S(n)= S(n-1)+1或S(n)= S(n-1)+2
但是,在采访中,我没有为此编写很好的代码。您将如何为该问题编写解决方案?
的确感谢!
您可以泛化您的递归函数以也采取已经采取的行动。
void steps(n, alreadyTakenSteps) { if (n == 0) { print already taken steps } if (n >= 1) { steps(n - 1, alreadyTakenSteps.append(1)); } if (n >= 2) { steps(n - 2, alreadyTakenSteps.append(2)); } }
它不是真正的代码,更多是伪代码,但是它应该可以使您有所了解。