Leetcode0119. 杨辉三角 II(simple)
II Simple 杨辉三角
2023-09-14 09:01:30 时间
目录
1. 题目描述
给定一个非负索引 rowIndex
,返回「杨辉三角」的第 rowIndex
行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: rowIndex = 3 输出: [1,3,3,1]
示例 2:
输入: rowIndex = 0 输出: [1]
示例 3:
输入: rowIndex = 1 输出: [1,1]
提示:
0 <= rowIndex <= 33
进阶:你可以优化你的算法到 O(rowIndex)
空间复杂度吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/pascals-triangle-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题分析
本题虽然简单,但是如何尽量使用最小的内存消耗呢?
以下采用迭代的方式从0到rowIndex逐层计算。
索引rowIndex的层的长度为rowIndex+1,而且首尾肯定是1.
考虑直接在长度为rowIndex+1的结果用数组上直接进行就地更新。这样就需要暂存一个数,比如说rowIndex=2时是[1,2,1],那在计算rowIndex=3的ans[1]时更新为3,但是接下来计算ans[2]时还需要原来的rowIndex=2时的ans[1],因此ans[1]在更新之前必须先暂存起来。其余一次类推。
考虑到每一层的第一个数和最后一个数肯定是1,因此考虑ans[rowIndex]作为中间变量进行暂存。这样就使得内存使用量仅限于存储最终结果用的变量,没有任何额外的内存消耗。
3. 代码实现
class Solution:
def getRow(self, rowIndex: int) -> List[int]:
ans = (rowIndex+1) * [0]
for k in range(rowIndex+1):
ans[0] = 1
ans[k] = 1
ans[rowIndex] = ans[0]
for j in range(1,k):
ans[rowIndex], ans[j] = ans[j], ans[rowIndex] + ans[j]
#print(k,ans)
return ans
时间和内存消耗表现都还不错。。。但是,内存消耗居然不是100%,难道还有内存消耗更小的方法?
回到主目录: 笨牛慢耕的Leetcode解题笔记(动态更新。。。)
相关文章
- Java实现 LeetCode 541 反转字符串 II(暴力大法)
- Java实现 LeetCode 462 最少移动次数使数组元素相等 II
- Java实现 LeetCode 210 课程表 II(二)
- Java实现 LeetCode 213 打家劫舍 II(二)
- Java实现 LeetCode 126 单词接龙 II
- Java实现 LeetCode 59 螺旋矩阵 II
- Java实现 LeetCode 45 跳跃游戏 II(二)
- 40. 组合总和 II
- 存在重复元素 II(C++)
- leetcode 刷题之路 66 Path Sum II
- Leetcode 1209. 删除字符串中的所有相邻重复项 II(牛逼,终于过了)
- TOJ 2419: Ferry Loading II
- 445. Add Two Numbers II ——while s1 or s2 or carry 题目再简单也要些测试用例
- Altera 公司 Cyclone II Cyclone III Cyclone IV 系列FPGA比较