LeetCode 0119. 杨辉三角 II - 基于原地滚动的空间优化
Posted Tisfy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 0119. 杨辉三角 II - 基于原地滚动的空间优化相关的知识,希望对你有一定的参考价值。
【LetMeFly】119.杨辉三角 II:基于原地滚动的空间优化
力扣题目链接:https://leetcode.cn/problems/pascals-triangle-ii/
给定一个非负索引 rowIndex
,返回「杨辉三角」的第 rowIndex
行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: rowIndex = 3 输出: [1,3,3,1]
示例 2:
输入: rowIndex = 0 输出: [1]
示例 3:
输入: rowIndex = 1 输出: [1,1]
提示:
0 <= rowIndex <= 33
进阶:
你可以优化你的算法到 O(rowIndex)
空间复杂度吗?
方法一:构造整个杨辉三角
这道题和LeetCode 118.杨辉三角类似。
不同之处在于:
- 这道题只需要返回最后一行
- 这道题的行数是从0开始的
那么方法一就是类似LeetCode 118.杨辉三角,返回时只返回最后一行即可。
具体思路可参考https://leetcode.letmefly.xyz/2022/07/17/LeetCode 0118.杨辉三角/
- 时间复杂度 O ( N 2 ) O(N^2) O(N2)
- 空间复杂度 O ( N 2 ) O(N^2) O(N2),因为需要存储整个三角
AC代码
C++
class Solution
public:
vector<int> getRow(int numRows)
numRows++;
vector<vector<int>> ans;
ans.push_back(1);
for (int i = 1; i < numRows; i++)
ans.push_back(1);
for (int j = 1; j < i; j++)
ans[i].push_back(ans[i - 1][j - 1] + ans[i - 1][j]);
ans[i].push_back(1);
return ans.back();
;
方法二:原地滚动 + 只构造最后一行
不难发现,第 i + 1 i+1 i+1行的计算只需要用到第 i i i行的值。
因此,我们只开辟最后一行的空间,并且原地滚动即可。
原地滚动的时候,记得从后往前计算。
- 时间复杂度 O ( N 2 ) O(N^2) O(N2)
- 空间复杂度 O ( 1 ) O(1) O(1),答案不计入算法空间复杂度
AC代码
C++
class Solution
public:
vector<int> getRow(int rowIndex)
vector<int> ans(rowIndex + 1);
ans[0] = 1;
for (int row = 1; row <= rowIndex; row++)
ans[row] = 1;
for (int th = row - 1; th > 0; th--) // 必须是从后往前
ans[th] += ans[th - 1];
return ans;
;
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/125853536
以上是关于LeetCode 0119. 杨辉三角 II - 基于原地滚动的空间优化的主要内容,如果未能解决你的问题,请参考以下文章