1 | 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 |
自顶向下的动态规划
对于一根长度为n的绳子,当n为1和2时,结果只能是1,当n大于2时,有两种处理方式:
- 先把它在i处切一刀,然后将继续切割剩下的绳子,当前的值是i*cut(n-i);
- 把它在i处切一刀,不再继续切割剩下的绳子,当前的值是i(n-i);
为了最大化乘积,需要选择二者中较大的那种切割方法因此Math.max(icut(n-i),i*(n-i));
1 | class Solution { |
非递归实现
1 | class Solution { |