Finding all paths down stairs?

后端 未结 13 1487
天命终不由人
天命终不由人 2020-12-13 07:21

I was given the following problem in an interview:

Given a staircase with N steps, you can go up with 1 or 2 steps each time. Output all possible way

13条回答
  •  一生所求
    2020-12-13 08:14

    Here is a C++ solution. This prints all possible paths for a given number of stairs.

    // Utility function to print a Vector of Vectors
    void printVecOfVec(vector< vector > vecOfVec)
    {
        for (unsigned int i = 0; i < vecOfVec.size(); i++)
        {
            for (unsigned int j = 0; j < vecOfVec[i].size(); j++)
            {
                cout << vecOfVec[i][j] << " ";
            }
            cout <<  endl;
        }
        cout << endl;
    }
    
    // Given a source vector and a number, it appends the number to each source vectors
    // and puts the final values in the destination vector
    void appendElementToVector(vector< vector  > src,
                               unsigned int num,
                               vector< vector  > &dest)
    {
        for (int i = 0; i < src.size(); i++)
        {
            src[i].push_back(num);
            dest.push_back(src[i]);
        }
    }
    
    // Ladder Problem
    void ladderDynamic(int number)
    {
        vector< vector > vecNminusTwo = {{}};
        vector< vector > vecNminusOne = {{1}};
        vector< vector > vecResult;
    
        for (int i = 2; i <= number; i++)
        {
            // Empty the result vector to hold fresh set
            vecResult.clear();
    
            // Append '2' to all N-2 ladder positions
            appendElementToVector(vecNminusTwo, 2, vecResult);
    
            // Append '1' to all N-1 ladder positions
            appendElementToVector(vecNminusOne, 1, vecResult);
    
            vecNminusTwo = vecNminusOne;
            vecNminusOne = vecResult;
        }
    
        printVecOfVec(vecResult);
    }
    
    int main()
    {
        ladderDynamic(6);
        return 0;
    }
    

提交回复
热议问题