0%

pascals-triangle

题目描述

给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void gen(int numRows, vector<vector<int>>& vec)
{
if (numRows == 1)
{
vec.push_back({ 1 });
return;
}
else
{
gen(numRows - 1, vec);
vector<int> t = { 1 };
vector<int> p = vec.back();
for (int i = 1; i < numRows - 1; i++)
t.push_back(p[i] + p[i - 1]);
t.push_back(1);
vec.push_back(t);
return;
}
}
vector<vector<int>> generate(int numRows) {
vector<vector<int>> res;
if (!numRows)return res;
gen(numRows, res);
return res;
}

题目描述

给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。

进阶:

你可以优化你的算法到 O(k) 空间复杂度吗?

题解

O(k)?观察一下下面的规律就好写了,类似于,优化空间的动态规划的方法。

1
2
3
4
5
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vector<int> getRow(int rowIndex) {
if (rowIndex == 0)return { 1 };
vector<int> p;
vector<int> res = { 1 };
for (int i = 0; i < rowIndex; i++)
res.push_back(0);
p = res;
for (int j = 2; j < rowIndex+2; j++)
{
for (int i = 1; i < j; i++)
{
res[i] = p[i - 1] + p[i];
}
p = res;
}
return res;
}

执行用时 :0 ms, 在所有 C++ 提交中击败了100.00%的用户

内存消耗 :6.5 MB, 在所有 C++ 提交中击败了100.00%的用户

666