基础1.4

1、整数拆分

题目描述

给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。

返回 你可以获得的最大乘积 。

示例 1:
输入: n = 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。

示例 2:
输入: n = 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。
提示:
2 <= n <= 58

代码

class Solution {
public:
    int integerBreak(int n) {
    int dp[n+1];
	memset(dp,0,sizeof(dp));//初始化,dp[1]与1做比较,d[i]首次取max用到
    dp[2]=1;
	for(int i=3;i<=n;i++){
		int mid=i/2;
		for(int j=1;j<=mid;j++){
			int y=i-j;
			int fst=max(j,dp[j]);
			int scd=max(y,dp[y]);
			dp[i]=max(dp[i],fst*scd);
		}
	}
	return dp[n];
    }
};

总结

做本题时把2到10的整数拆分列出来

2=1+1;
3=1+2;
4=1+3,4=2+2;
...

把一个整数拆成两个,这两个数要不要拆取决于拆分后结果是否大于本数,比如3=1+2,1不能拆,2>dp[2]也不能拆,所以dp[3] =1✖2=2;再比如4,4=1+3,1不能拆,3>dp[3]也不拆,dp[4]=1✖3=3,4=2+2,2>dp[2],所以2不拆,dp[4]更新为2✖2=4;其他数类似。

链接: 343. 整数拆分

2、不同的二叉搜索树

题目描述

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。

示例 1:
输入:n = 3
输出:5

图片: Alt

示例 2:
输入:n = 1
输出:1
提示:
1 <= n <= 19

代码

class Solution {
public:
    int numTrees(int n) {
    int dp[n+1];
	memset(dp,0,sizeof(dp));
	dp[0]=1;//后面要用到
    dp[1]=1;
	for(int i=2;i<=n;i++){
		for(int j=0;j<i;j++){
			dp[i]+=dp[j]*dp[i-j-1];
		}
	}
	return dp[n];
    }
};

总结

这个题不太会…,看了题解才明白的。要注意节点数为1,2,3的二叉树之间的关系,找出规律。比如节点数为3时,1、2、3分别为头节点,1为头节点时比1小的无,比1大的有2、3,则dp[3]+=dp[0]✖dp[2],2为头结点时,比2小的为1,比2大的为3,dp[3]+=dp[1]✖dp[1],3为头结点时,比3小的有1、2,比3大的无,则dp[3]+=dp[2]✖dp[0]。

链接: 96. 不同的二叉搜索树

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
循环结构是Python编程语言中非常重要的一部分。它允许我们重复执行一段代码,以达到更高效和简洁的编程。 在Python中,有两种常用的循环结构,分别是for循环和while循环。 for循环适用于已知循环次数的情况。它通过遍历一个可迭代对象(比如列表或字符串),依次取出其中的元素,并执行相应的代码块。例如,我们可以使用for循环来计算一个列表中所有元素的总和。代码如下: ```python numbers = [1, 2, 3, 4, 5] total = 0 for num in numbers: total += num print(total) # 输出:15 ``` while循环适用于未知循环次数的情况。它会根据一个条件判断的真假来决定是否继续循环执行代码块。当条件为真时,代码块会一直执行下去,直到条件为假时停止循环。例如,我们可以使用while循环来实现一个简单的倒数计时器。代码如下: ```python countdown = 10 while countdown > 0: print(countdown) countdown -= 1 print("倒计时结束!") ``` 上述代码会从10开始倒数,直到countdown变为0时,停止循环,并输出"倒计时结束!"。 无论是for循环还是while循环,我们在使用时都需要小心避免死循环的情况。如果循环条件一直为真,循环就会一直执行下去,导致程序无法正常结束。因此,在编写代码时,我们应该保证循环条件能够在一定条件下变为假,以防止出现死循环的情况。 循环结构在Python编程中具有重要作用,它可以帮助我们处理大量数据、重复任务和条件控制等问题,提高代码的灵活性和效率。熟练掌握循环结构的使用,对于编写高效的程序非常重要。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值