9.9|day 2|整数拆分|不同的二叉搜索树

整数拆分:

复制代码
class Solution {
    public int integerBreak(int n) {
    int[] dp = new int[n+1];
    dp[2] =  1;
    for(int i = 3;i<=n;i++){
       for(int j = 1;j<=i-j;j++){
           dp[i] = Math.max(dp[i],Math.max(j*dp[i-j],j*(i-j)));
       }
    }//这里感觉要注意的就是j是我们要拆分的数,所以不会是dp[j]*dp[i-j],这种情况在代码的进行中会进行
       //因为j是从小到大进行的,拆分j的情况已经计算过了
        //感觉智商有点不够
        //从定义上来理解吧:j*dp[i-j]是将一个数拆分成两个及两个数以上,而dp[i-j]*dp[j]是将一个数默认拆分成四个数以上
        //前一种情况包括后一种,好像懂了
    return dp[n];
    }
}
复制代码
class Solution {
    public int numTrees(int n) {
    int[] dp = new int[n+1];
    dp[0] = 1;
    dp[1]  =1;//因为n的取值问题,所以不能写dp[2]
    for(int i = 2;i<=n;i++){
        for(int j  =1;j<=i;j++){
            ///dp[j-1]代表以j为头节点的左子树的最大二叉搜索树
            //dp[i-j]就是比j大的数,i是总数
            dp[i] += dp[j-1]*dp[i-j];
        }
    }
    return dp[n];
    }
}
相关推荐
卡提西亚22 分钟前
leetcode-1438. 绝对差不超过限制的最长连续子数组
算法·leetcode·职场和发展
Java面试题总结34 分钟前
LeetCode 93.复原IP地址
算法·leetcode·职场和发展·.net
从零开始的代码生活_1 小时前
C++ 多态详解:虚函数、动态绑定、抽象类与虚表原理
开发语言·c++·后端·学习·算法
yuannl101 小时前
图的存储方式
数据结构
泷寂2 小时前
最小生成树 (MST基础)
算法
Daniel_1232 小时前
数组——总结篇
算法
不懒不懒2 小时前
【针对路面识别数据集,结合三轴加速度标准化数据及多路面识别需求,以下是算法选择与处理方案】
算法
Reart2 小时前
Leetcode 121. 买卖股票的最佳时机(717)
后端·算法
会编程的小孩3 小时前
初识数据类型以及变量定义
数据结构·算法
Reart3 小时前
Leetcode 337.打家劫舍3(717)
后端·算法