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 ...
随机推荐
- ARM的37个寄存器
31个通用寄存器,包括程序计数器(PC)在内.这些寄存器都是32位寄存器. 6个状态寄存器.这些寄存器都是32位寄存器. 通用寄存器(R0-R15)可分为三类 :不分组寄存器R0~R7: 分组寄存器R ...
- javaScript-条件语句优化
1.多重判断时使用 Array.includes test = (fruit: string) => { if (fruit == 'apple' || fruit == 'strawberry ...
- 剑指offer--23.合并两个排序的链表
时间限制:1秒 空间限制:32768K 热度指数:421239 本题知识点: 链表 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. class ...
- FlashDevelop安装配置
1.下载 FlashDevelop,flash sdk,flash sdk debug,.net framework,java sdk(32位,不管机器是多少位,否则不能单步调试的) 2. 安装Fl ...
- 关于linux 编程
emacs 编辑器 gcc/g++ 编译器 gdb 调试工具 valgrind 内存泄露检查 doxygen 文档组织工具
- android线程 Handler Message Queue AsyncTask线程模型 线程交互 + 修改Button样式 示例 最终easy整合版
首先原谅我把文章的标题写的这么长.其实我还嫌弃它短了因为 写不下去了所以我就不写了.因为我实在不知道该怎么定义这篇文章的标题或许应该叫 "乱谈"比较合适. 这样可能还体现了 ...
- 深入Guerrilla Games解密次世代开山大作《杀戮地带暗影坠落》(The technology of Killzone Shadow Fall)
文章摘要:这几天终于有时间,把全文翻译完了,自己感觉不是太满意,不过大家能看懂就好,就当一个学习的机会.整篇文章通过SONY第一方游戏工作室Guerrilla Games主创的语录,为我们展现了次世代 ...
- 瀑布流下滑 发送ajax
<!DOCTYPE=html> <html> <head> <meta charset="UTF-8"> ...
- ethtool常见命令使用方法
查看网卡信息:ethtool DEVNAME Settings for eth6: Supported ports: [ FIBRE ] #可以看出网卡类型:光口或电口 Supported link ...
- java 线程基础学习
今天趁空闲时间看了点线程方面的知识 首先看的是volatile关键字,按照我之前书上看到的一点知识,自己的理解是,volatile关键字会阻止编译优化,因为cpu每次读取数据是并不是从高速缓存中读取, ...