Leetcode-D10-264. 丑数II &96. 不同的二叉搜索树

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个节点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值