Given numRows, generate the first numRows
of Pascal's triangle.
For example, given numRows = 5, return
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
Дано число numRows. Сгенерируйте первые numRows строк треугольника Паскаля.
Например, для numRows = 5 верните
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
// C++
class Solution {
public:
vector<vector<int>> generate(int
numRows) {
}
};
// Java
public class
Solution
{
public
List<List<Integer>> generate(int numRows) {
}
}
структуры данных - двумерный массив
В динамическом двумерном массиве следует сгенерировать строки треугольника Паскаля.
Пусть m[i][j] – текущая ячейка массива. Тогда
m[i][0] = 1,
m[i][j] = m[i – 1][j – 1] + m[i – 1][j]
Реализация алгоритма
class Solution
{
public:
vector<vector<int> > generate(int
numRows)
{
vector<vector<int> > res;
if (numRows == 0) return
res;
vector<int> temp(1,1);
res.push_back(temp);
for(int i = 1; i <
numRows; i++)
{
vector<int> c(i+1,1);
for(int j = 1; j <
i; j++)
c[j] =
res[i-1][j-1] + res[i-1][j];
res.push_back(c);
}
return res;
}
};
Java реализация
class Solution
{
public
List<List<Integer>> generate(int numRows)
{
List<List<Integer>> res = new
ArrayList<List<Integer>>();
if (numRows
== 0) return res;
for (int i = 0; i < numRows; i++)
res.add(new ArrayList<Integer>());
res.get(0).add(1); // first row = [1]
for (int i = 1; i < numRows; i++)
{
res.get(i).add(1);
for (int j = 1; j < i; j++)
res.get(i).add(res.get(i
- 1).get(j) + res.get(i - 1).get(j - 1));
res.get(i).add(1);
}
return res;
}
}