题目描述
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/pascals-triangle-ii/
示例1:
输入: 3
输出: [1,3,3,1]
进阶:
- 你可以优化你的算法到 O(k) 空间复杂度吗?
解题思路
三种思路:
- 法一:根据杨辉三角的数学公式,按表达式编写
- 法二:按照常规取值规律求解,开辟空间大小为:
res = [[1 for j in range(i + 1)] for i in range(rowIndex + 1)]
(时间复杂度为O(k ^ 2),空间复杂度为O(k∗(k+1)/2)) - 法三:进阶方法,只需要开辟
res = [1] * (rowIndex + 1)
大小的空间即可,每次循环从右向左逐步更新数值,循环k - 1次(时间复杂度为O(k ^ 2),空间复杂度为O(k))
赋值语句: s[i][j] = s[i - 1][j -1] + s[i - 1][j]
我的代码
# 119 杨辉三角II(法一):
class Solution(object):
def getRow(self, rowIndex):
res = [1]
for i in range(1, rowIndex + 1):
res.append(res[i - 1] * (rowIndex - i + 1) / i)
return res
# 119 杨辉三角II(法二):时间复杂度:O(k ^ 2),空间复杂度:O(k∗(k+1)/2)
class Solution(object):
def getRow(self, rowIndex):
res = [[1 for j in range(i + 1)] for i in range(rowIndex + 1)]
for i in range(2, rowIndex + 1):
for j in range(1, i):
res[i][j] = res[i - 1][j - 1] + res[i - 1][j]
return res[-1]
# 119 杨辉三角II(法三):时间复杂度:O(k ^ 2),空间复杂度:O(k)
class Solution(object):
def getRow(self, rowIndex):
res = [1] * (rowIndex + 1)
for i in range(2, rowIndex + 1):
for j in range(i - 1, 0, -1):
res[j] += res[j - 1]
return res
心得
- 简单的题总会有更优秀的算法。