leetcode343
public class Solution
{
public int IntegerBreak(int n)
{
if (n == )
{
return ;
}
else if (n == )
{
return ;
}
var max = int.MinValue;
for (int i = ; i <= n / ; i++)
{
var div = n / i;
var mod = n % i;
var cur = ;
if (mod == )
{
cur = Convert.ToInt32(Math.Pow(i, div));
}
else
{
var cur1 = Convert.ToInt32(Math.Pow(i, div - ) * (i + mod));
var cur2 = Convert.ToInt32(Math.Pow(i, div)) * mod;
cur = Math.Max(cur1, cur2);
}
if (cur > max)
{
max = cur;
}
else
{
break;
}
}
return max;
}
}
https://leetcode.com/problems/integer-break/#/description
这道题的解题思路是,从2到n/2每个值依次进行尝试,对于每一个值,计算这种情况下的因子乘积,
如果是可以被整除,则计算当前值的“倍数的次方”;如果不能被整除,则分两种情况分别计算。
第一种是:将某一个因子与余数合并为一个因子。
第二种是:剩余的余数做一个单独的因子。
每种情况都计算出其因子的乘积,然后找最大值。
举例来说,输入参数n=12,
i=2,执行21行,cur=2^6=64,更新max=64
i=3,执行21行,cur=3^4=81,更新max=81
i=4,执行21行,cur=4^3=64,保持max=81
i=5,执行25~27,cur1=5^(2-1) * (5+2)=5*7=35,cur2=5^2 * 2=5*5*2=50,cur=50,保持max=81
i=6,执行21行,cur=6^2=36,保持max=81
执行完毕,最终结果为81。
补充一个使用dp的解决方案:
public class Solution
{
public int IntegerBreak(int n)
{
int[] dp = new int[n + ];
dp[] = ;
for (int i = ; i <= n; i++)
{
for (int j = i-; j >=; j--)
{
var premax = dp[i - j];
var distance = i - j;
var cur = Math.Max(premax, distance) * j;
dp[i] = Math.Max(dp[i], cur);
}
}
return dp[n];
}
}
leetcode343的更多相关文章
- [Swift]LeetCode343. 整数拆分 | Integer Break
Given a positive integer n, break it into the sum of at least two positive integers and maximize the ...
- leetcode343 Integer Break
思路: 将n不断拆分3出来直至其小于或等于4. 实现: class Solution { public: int integerBreak(int n) { ] = {, , , }; ) retur ...
- LeetCode343 整数拆分详解
题目详情 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化. 返回你可以获得的最大乘积. 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1 ...
- LeetCode 343
Integer Break Given a positive integer n, break it into the sum of at least two positive integers an ...
随机推荐
- 编写自己的validate校验框架原理(转)
原文链接:http://blog.csdn.net/a973893384/article/details/51517388 具体思路: 我们使用自定义注解实现.然后需要解决的是两个问题: 1是如何扫描 ...
- Python基础学习(第6天)
1.zip函数 1)zip函数在只有一个参数时运作的方式. x = [1, 2, 3] x = zip(x) print x输出:[(1,), (2,), (3,)] 2)zip函数在没有参数时运作的 ...
- New Concept English three (42)
21 33 Cave exploration, or pot-holing, as it has come to be known, is a relatively new sport. Perhap ...
- windows 改路径有小差异
https://jingyan.baidu.com/article/5552ef473e2df6518ffbc916.html cmd是windows下一个非常常用的工具,但是它默认的地址却是不变的. ...
- laravel发送邮件
这里已163为例: 1..env文件配置和mail.php配置(默认使用.env) MAIL_DRIVER=smtp MAIL_HOST=smtp.163.com MAIL_PORT=465 MAIL ...
- F. Coprime Subsequences
题目链接: F. Coprime Subsequences time limit per test 2 seconds memory limit per test 256 megabytes inpu ...
- Leetcode 890. Find and Replace Pattern
把pattern映射到数字,也就是把pattern标准化. 比如abb和cdd如果都能标准化为011,那么就是同构的. class Solution: def findAndReplacePatter ...
- Net Core网络通信
Net Core网络通信 https://www.cnblogs.com/xxred/p/9859893.html 聊聊如何设计千万级吞吐量的.Net Core网络通信! 作者:大石头 时间:2018 ...
- Codeforces 589F Gourmet and Banquet
A gourmet came into the banquet hall, where the cooks suggested n dishes for guests. The gourmet kno ...
- 剑指offer-第五章优化时间和空间效率(数组中出现次数超过一半的数字)
题目:输入一个数组,找出一个数字,它在数组中出现的次数超过数组的一半. 题目规定如果可以改变数组中元素的位置. 思路1:如果数组是排序的,那么中间元素的位置不就是次数超过数组一半的元素吗?是的,因此我 ...