返回
高效解题杨辉三角 2:掌握递归与递推精华
前端
2023-11-08 03:25:08
引言
踏上 LeetCode 的算法征途,「杨辉三角」可谓绕不开的经典难题。今天,我们聚焦于其分支「杨辉三角 2」,深入探究递归与递推的魅力,助你一臂之力。
递归算法:优雅解法
递归,犹如一场自洽的旅程,在问题中寻找问题的影子。对于「杨辉三角 2」,我们可以从杨辉三角的构成特点入手:
pascal[i][j] = pascal[i-1][j-1] + pascal[i-1][j]
其中,pascal[i][j]
表示杨辉三角第 i
行第 j
列的数字,i
和 j
分别为行索引和列索引。根据此公式,我们可以构建递归函数:
def get_row(rowIndex):
if rowIndex == 0:
return [1]
prev_row = get_row(rowIndex - 1)
curr_row = [prev_row[i] + prev_row[i + 1] for i in range(rowIndex)]
curr_row.insert(0, 1)
curr_row.append(1)
return curr_row
递推算法:高效计算
递推,一种蓄势待发的策略,通过逐层积累实现目标。对于「杨辉三角 2」,我们可以利用杨辉三角的特性,逐行计算:
def get_row(rowIndex):
row = [1]
for _ in range(rowIndex):
new_row = []
new_row.append(1)
for i in range(len(row) - 1):
new_row.append(row[i] + row[i + 1])
new_row.append(1)
row = new_row
return row
LeetCode 示例:一试便知
让我们在 LeetCode 上检验一下我们的算法:
assert get_row(3) == [1, 3, 3, 1]
assert get_row(0) == [1]
assert get_row(1) == [1, 1]
总结:算法之美
递归与递推,两种不同的思维方式,却能殊途同归,解开算法难题。理解并掌握这些技巧,将为你的算法征途铺平道路。
掌握了「杨辉三角 2」的精髓,我们不仅攻克了一道难题,更收获了算法的宝贵经验。LeetCode 的征程仍在继续,让我们携手探索算法世界的奥秘,不断突破自我!