Skip to content

Commit fcd0985

Browse files
committed
Add generate nth row of Pascal triangle
1 parent a2265ab commit fcd0985

File tree

2 files changed

+74
-0
lines changed

2 files changed

+74
-0
lines changed

README.md

+3
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,9 @@ Princeton Algorithms [Part 1](https://www.coursera.org/learn/algorithms-part1/)
188188
* GaussElimination : Gauss elimination or Gauss Jordan method to solve system of linear equations [Java](problems/math/GaussElimination.java)
189189
* Point2D : Data structure to represent point in 2D space [Java](problems/math/Point2D.java)
190190
* Point3D : Data structure to represent point in 3D space [Java](problems/math/Point3D.java)
191+
* Generate Nth row of Pascal triangle
192+
* Recursive [C++](problems/math/PascalTriangle.cpp)
193+
* Iterative [C++](problems/math/PascalTriangle.cpp)
191194

192195
## Permutation
193196
* Permutation of objects [Java](problems/queue/Permutation.java)

problems/math/PascalTriangle.cpp

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
// https://www.geeksforgeeks.org/find-the-nth-row-in-pascals-triangle/
2+
3+
#include <iostream>
4+
#include <vector>
5+
6+
template <typename T>
7+
void print(std::vector<T>& items)
8+
{
9+
if (items.size() == 0) {
10+
return;
11+
}
12+
13+
for (auto item : items) {
14+
std::cout << item << " ";
15+
}
16+
std::cout << "\n";
17+
}
18+
19+
std::vector<int> generatePascalTriangleRec(int row)
20+
{
21+
std::vector<int> currentRow;
22+
currentRow.push_back(1);
23+
24+
if (row == 0) {
25+
return currentRow;
26+
}
27+
28+
std::vector<int> previousRow = generatePascalTriangleRec(row - 1);
29+
30+
for (int i = 1; i < previousRow.size(); ++i) {
31+
currentRow.push_back(previousRow[i - 1] + previousRow[i]);
32+
}
33+
34+
currentRow.push_back(1);
35+
36+
return currentRow;
37+
}
38+
39+
std::vector<int> generatePascalTriangleIter(int row)
40+
{
41+
int previous = 1;
42+
std::vector<int> currentRow;
43+
currentRow.push_back(1);
44+
45+
for (int i = 1; i <= row; ++i) {
46+
int current = previous * (row - i + 1) / i;
47+
currentRow.push_back(current);
48+
previous = current;
49+
}
50+
return currentRow;
51+
}
52+
53+
int main()
54+
{
55+
int n = 10;
56+
57+
std::cout << "Recursive\n";
58+
for (int i = 0; i < n; ++i) {
59+
std::cout << "Row " << i << " : ";
60+
std::vector<int> numbers = generatePascalTriangleRec(i);
61+
print(numbers);
62+
}
63+
64+
std::cout << "===============================\n";
65+
std::cout << "Iterative\n";
66+
for (int i = 0; i < n; ++i) {
67+
std::cout << "Row " << i << " : ";
68+
std::vector<int> numbers = generatePascalTriangleIter(i);
69+
print(numbers);
70+
}
71+
}

0 commit comments

Comments
 (0)