Problem: 剑指 Offer 14- I. 剪绳子
思路
初看不知如何下手,于是边吃泡面边找规律然后就AC了哈哈哈
解题方法
找规律 模拟 我们看下1-10的数取最大值的情况
发现了什么??是不是n增大一个数,他的因子就增大一个数,例如n=2到n=3就是从原来的1+1变成了1+2,还发现什么呢?他加起来的因子没有4,一旦出现4,4就分成两个2,例如n=6到n=7。 所以我们只需要一个数组,一个for循环就可以模拟这个过程,其中,数组的每一位保存每一个n的因子,例如n=2时有两个因子(1+1),所以s[0]=1,s[1]=1
Code
var cuttingRope = function(n) {
//s的初始值为n=2的情况
var s=[1,1]
var len=s.length
//从3开始
for(var i=3;i<=n;i++)
{
//每次都更改最前面的那个因子
s[0]++
//如果因子等于4就要把它分成两个值为2的因子
if(s[0]==4)
{
s[0]=2
s[++len]=2
}
//因为每次更改最前面的,所以要确保最前面是最小的
s.sort((a,b)=>a-b)
}
//用for循环把所有的因子乘起来就是我们要返回的
for(var i=1;i<len;i++)
s[i]*=s[i-1]
return s[len-1]
};