算法随想录第四十一天打卡|343. 整数拆分 , 96.不同的二叉搜索树

详细布置 

今天两题都挺有难度,建议大家思考一下没思路,直接看题解,第一次做,硬想很难想出来。

 343. 整数拆分 

代码随想录

视频讲解:动态规划,本题关键在于理解递推公式!| LeetCode:343. 整数拆分_哔哩哔哩_bilibili

思路

这道题我知道dp等于分解后所能达到的最大值,就是不知道如何进行拆分。

class Solution(object):
    def integerBreak(self, n):
        dp=[0]*(n+1)
        dp[2]=1
        for i in range(3,n+1):
           for j in range(1,i//2+1):
               dp[i]=max(dp[i-j]*j,(i-j)*j,dp[i])
        return dp[n]

总结

我觉得我应该是理解了,下次应该可以做出来。

 96.不同的二叉搜索树 

代码随想录

视屏讲解:动态规划找到子状态之间的关系很重要!| LeetCode:96.不同的二叉搜索树_哔哩哔哩_bilibili

class Solution(object):
    def numTrees(self, n):
        if n==1:
            return 1
        if n==2:
            return 2
        dp=[0]*(n+1)
        dp[0]=1
        for i in range(1,n+1):
            for j in range(0,i+1):
                dp[i]+=dp[j-1]*dp[i-j]
        return dp[n]

总结

这个确实是想不出来呢,不过在知道思路后,之后再写的话应该是没问题的了,主要还是思路。

你可能感兴趣的:(算法)