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 ...
随机推荐
- ZOJ 3207 80ers' Memory(strcmp函数的用法)
80ers' Memory Time Limit: 1 Second Memory Limit: 32768 KB I guess most of us are so called 80er ...
- form表单的提交地址一定要是完整的绝对地址
<form action="<%=path%>/servlet/DologinServlet" =<form action="<%=requ ...
- HAWQ取代传统数仓实践(十五)——事实表技术之无事实的事实表
一.无事实事实表简介 在多维数据仓库建模中,有一种事实表叫做"无事实的事实表".普通事实表中,通常会保存若干维度外键和多个数字型度量,度量是事实表的关键所在.然而在无事实的事实表中 ...
- 抓https包
一.charles抓https 1.打开charles,打开Help--SSL Proxy--Install Charles Root Certificate,charles安装证书,傻瓜式安装即可 ...
- JavaScript例子
模态框(JavaScript) <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- Linux 安全rm
先将shell脚本放在某个全局路径下,如/usr/local/bin #!/bin/sh # safe rm # Don't remove the file, just move them to a ...
- bzoj 4806 炮
Written with StackEdit. Description 众所周知,双炮叠叠将是中国象棋中很厉害的一招必杀技.炮吃子时必须隔一个棋子跳吃,即俗称"炮打隔子". 炮跟炮 ...
- Python学习-括号
python语言最常见的括号有三种,分别是:小括号( ).中括号[ ]和大括号也叫做花括号{ }.其作用也各不相同,分别用来代表不同的python基本内置数据类型. 1.python中的小括号( ): ...
- HWOJ-字符串的逆序
将一个字符串str的内容颠倒过来,并输出.str的长度不超过100个字符. 如:输入“I am a student”,输出“tneduts a ma I”. 输入参数: inputString:输入的 ...
- 剑指offer-第六章面试中的各项能力(和为S的两个数字VS和为S的连续正序列)
题目1:输入一个排序数组和一个值S,输出数组中两个数的和为S的任意一对数. 思路:分别用两个指针指向数组的头start和尾end.如果两个数字之和等于S输出.如果打于,则end--,再次相加.因此循环 ...