Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions include/0005_DynamicProgramming/0008_TilingProblem.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#pragma once

#include<vector>
using namespace std;

/*
Pattern 1
Linear Recurrence

Description
Given a "2 x n" board and tiles of size "2 x 1", the task is to count the number of ways to tile the given board using the 2 x 1 tiles.
A tile can either be placed horizontally i.e., as a 1 x 2 tile or vertically i.e., as 2 x 1 tile.
*/

namespace TilingProblem
{
class DynamicProgramming
{
private:
int NumberOfWaysRecursiveHelper(int n);
public:
int RecursiveNumberOfWays(int n);
int DpNumberOfWays(int n);
};
}
42 changes: 42 additions & 0 deletions source/0005_DynamicProgramming/0008_TilingProblem.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#include "../../include/0005_DynamicProgramming/0008_TilingProblem.h"

namespace TilingProblem
{
int DynamicProgramming::NumberOfWaysRecursiveHelper(int n)
{
if (n < 0)
{
return 0;
}

if (n == 0)
{
return 1;
}

int result = 0;
result += this->NumberOfWaysRecursiveHelper(n - 1);
result += this->NumberOfWaysRecursiveHelper(n - 2);

return result;
}

int DynamicProgramming::RecursiveNumberOfWays(int n)
{
return this->NumberOfWaysRecursiveHelper(n);
}

int DynamicProgramming::DpNumberOfWays(int n)
{
vector<int> dp(n + 1, 0);
dp[0] = 1;
dp[1] = 1;

for (int i = 2; i <= n; i++)
{
dp[i] = dp[i - 1] + dp[i - 2];
}

return dp[n];
}
}
1 change: 1 addition & 0 deletions source/0005_DynamicProgramming/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ set(0005DYNAMICPROGRAMMING_SOURCES
0005_HouseRobber1.cc
0006_HouseRobber2.cc
0007_DecodeWays.cc
0008_TilingProblem.cc

)

Expand Down
33 changes: 33 additions & 0 deletions test/0005_DynamicProgramming/0008_TilingProblemTest.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#include<gtest/gtest.h>
#include "../../include/0005_DynamicProgramming/0008_TilingProblem.h"

namespace TilingProblem
{
TEST(TilingProblem, RecursionTest01)
{
// Arrange
DynamicProgramming dp;
int nummberOfRows = 4;
int expectedNumberOfWays = 5;

// Act
int actualNumberOfWays = dp.RecursiveNumberOfWays(nummberOfRows);

// Assert
ASSERT_EQ(expectedNumberOfWays, actualNumberOfWays);
}

TEST(TilingProblem, DpTest01)
{
// Arrange
DynamicProgramming dp;
int nummberOfRows = 4;
int expectedNumberOfWays = 5;

// Act
int actualNumberOfWays = dp.DpNumberOfWays(nummberOfRows);

// Assert
ASSERT_EQ(expectedNumberOfWays, actualNumberOfWays);
}
}
1 change: 1 addition & 0 deletions test/0005_DynamicProgramming/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ add_executable(
0005_HouseRobber1Test.cc
0006_HouseRobber2Test.cc
0007_DecodeWaysTest.cc
0008_TilingProblemTest.cc

)

Expand Down