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的更多相关文章

  1. [Swift]LeetCode343. 整数拆分 | Integer Break

    Given a positive integer n, break it into the sum of at least two positive integers and maximize the ...

  2. leetcode343 Integer Break

    思路: 将n不断拆分3出来直至其小于或等于4. 实现: class Solution { public: int integerBreak(int n) { ] = {, , , }; ) retur ...

  3. LeetCode343 整数拆分详解

    题目详情 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化. 返回你可以获得的最大乘积. 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1 ...

  4. LeetCode 343

    Integer Break Given a positive integer n, break it into the sum of at least two positive integers an ...

随机推荐

  1. ARM的37个寄存器

    31个通用寄存器,包括程序计数器(PC)在内.这些寄存器都是32位寄存器. 6个状态寄存器.这些寄存器都是32位寄存器. 通用寄存器(R0-R15)可分为三类 :不分组寄存器R0~R7: 分组寄存器R ...

  2. javaScript-条件语句优化

    1.多重判断时使用 Array.includes test = (fruit: string) => { if (fruit == 'apple' || fruit == 'strawberry ...

  3. 剑指offer--23.合并两个排序的链表

    时间限制:1秒 空间限制:32768K 热度指数:421239 本题知识点: 链表 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. class ...

  4. FlashDevelop安装配置

    1.下载 FlashDevelop,flash sdk,flash sdk debug,.net framework,java sdk(32位,不管机器是多少位,否则不能单步调试的) 2.  安装Fl ...

  5. 关于linux 编程

    emacs 编辑器 gcc/g++ 编译器 gdb 调试工具 valgrind 内存泄露检查 doxygen 文档组织工具

  6. android线程 Handler Message Queue AsyncTask线程模型 线程交互 + 修改Button样式 示例 最终easy整合版

     首先原谅我把文章的标题写的这么长.其实我还嫌弃它短了因为 写不下去了所以我就不写了.因为我实在不知道该怎么定义这篇文章的标题或许应该叫 "乱谈"比较合适. 这样可能还体现了 ...

  7. 深入Guerrilla Games解密次世代开山大作《杀戮地带暗影坠落》(The technology of Killzone Shadow Fall)

    文章摘要:这几天终于有时间,把全文翻译完了,自己感觉不是太满意,不过大家能看懂就好,就当一个学习的机会.整篇文章通过SONY第一方游戏工作室Guerrilla Games主创的语录,为我们展现了次世代 ...

  8. 瀑布流下滑 发送ajax

    <!DOCTYPE=html>      <html>      <head>      <meta charset="UTF-8"> ...

  9. ethtool常见命令使用方法

    查看网卡信息:ethtool DEVNAME Settings for eth6: Supported ports: [ FIBRE ] #可以看出网卡类型:光口或电口 Supported link ...

  10. java 线程基础学习

    今天趁空闲时间看了点线程方面的知识 首先看的是volatile关键字,按照我之前书上看到的一点知识,自己的理解是,volatile关键字会阻止编译优化,因为cpu每次读取数据是并不是从高速缓存中读取, ...