0️⃣python数据结构与算法学习路线
学习内容:
- 基本算法:枚举、排序、搜索、递归、分治、优先搜索、贪心、双指针、动态规划等…
- 数据结构:字符串(string)、列表(list)、元组(tuple)、字典(dictionary)、集合(set)、数组、队列、栈、树、图、堆等…
题目:
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
输入输出:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
解题思路:
这道题考察就是找规律
- 首先我们先考虑三种特殊情况,分别是 numRows 等于1,和2
- 然后再考虑 numRows >= 3 的情况,对于每一行,头尾两个都是1,中间的每一个元素都是以a[i][j] = a[i-1][j-1] + a[i-1][j](左上+右上)规律生成的
算法实现:
class Solution(object):
def generate(self, numRows):
if numRows == 1:
return [[1]]
elif numRows == 2:
return [[1],[1,1]]
else:
a = [[1],[1,1]]
for i in range(2,numRows):
c = []
c.append(1) # 左边第一个数是1
for j in range(1,i):
c.append(a[i-1][j-1] + a[i-1][j])
c.append(1) # 右边第一个数是1
a.append(c)
return (a)
出现问题:
- 值为1时,返回[[1]]而不是[1]