264. 丑数 II
1、怎么能说一个数丑呢???
2、没啥想法,提示
3、看了思路,为什么不对呢哈哈哈哈!debug后发现了原因:当两个数值相等时,如果用elif,就只增加了一个index,相当于两个数相等时,只选择了一个,而事实是当生成两个相同的数时,我们把它当成一个数,就取他的值加入生成数组,相当于两个都取了,增加两个的index,让其都进入下一步计算
错误代码:
class Solution:
def nthUglyNumber(self, n: int) -> int:
new_nums=[1]+(n-1)*[0]
i2 = 0
i3 = 0
i5 = 0
for i in range(1,n):
new_nums[i] = min(new_nums[i2]*2, new_nums[i3]*3, new_nums[i5]*5)
if new_nums[i]==new_nums[i2]*2:
i2 +=1
elif new_nums[i]==new_nums[i3]*3:
i3 +=1
else:
i5 +=1
return new_nums[n-1]
4、修改一下,成功!
class Solution:
def nthUglyNumber(self, n: int) -> int:
new_nums=[1]+(n-1)*[0]
i2 = 0
i3 = 0
i5 = 0
for i in range(1,n):
new_nums[i] = min(new_nums[i2]*2, new_nums[i3]*3, new_nums[i5]*5)
if new_nums[i]==new_nums[i2]*2:
i2 +=1
if new_nums[i]==new_nums[i3]*3:
i3 +=1
if new_nums[i]==new_nums[i5]*5:
i5 +=1
return new_nums[n-1]
96. 不同的二叉搜索树
1、看到树就很怕怕
2、好难啊
3、连二叉搜索树的定义都不知道,怎么能知道怎么解题呢
二叉搜索树就是左面都小于根节点,右面都大于根节点
4、妙极,爽极
class Solution:
def numTrees(self, n: int) -> int:
# res[n]代表节点数量为n时二叉搜索树的种类
res = [0]*(n+1)
res[0] = res[1] = 1
for i in range(2,n+1):
tmp = 0
for j in range(i):
tmp += res[j]*res[i-j-1]
res[i] = tmp
return res[n]
5、这道题还是用了递归的思想。
首先,n个数构成的二叉树的种类是其中每个数作为根节点构成的二叉树种类之和。
其次,每个数作为根节点构成的二叉树的种类为其左侧数构成二叉树的种类*右侧。
最后,左右侧分别递归至只有两个节点的情况。此时遍历第一个节点,其左侧节点数为0,右侧节点数为1,即我们的初始条件,res【0】=res【1】=1
6、这里的res【0】=1是为了计算而设定的初始条件
7、因为设置了res【0】,所以从0到n,一共有n+1个节点。