一尘不染

在楼梯下找到所有路径?

algorithm

面试中给了我以下问题:

给定一个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

但是,在采访中,我没有为此编写很好的代码。您将如何为该问题编写解决方案?

的确感谢!


阅读 179

收藏
2020-07-28

共1个答案

一尘不染

您可以泛化您的递归函数以也采取已经采取的行动。

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));
    }
}

它不是真正的代码,更多是伪代码,但是它应该可以使您有所了解。

2020-07-28