JS ——贪心
var cuttingRope = function(n){
if(n%3==1){
if((n-4)/3>0){
let i = (n-4)/3;
return Math.pow(3,i)*4;
}else return 4;
}else if(n%3==2){
if((n-2)/3>0){
let i = (n-2)/3;
return Math.pow(3,i)*2;
}else return 1;
}else{
if((n-3)/3>0){
let i = n/3;
return Math.pow(3,i);
}
else return 2;
}
}
在草纸上画了几笔,发现规律就是逢3必大,测试了几个数据发现十分合理,于是有了模3取余进行处理的办法。
时间复杂度空间复杂度均为 O1
是为数不多的我自己的解法比题解快的题目。。。。
JS——动态规划
var cuttingRope = function(n) {
const dp = new Array(n + 1).fill(1);
for (let i = 3; i <= n; ++i) {
for (let j = 1; j < i; ++j) {
dp[i] = Math.max(dp[i], j * (i - j), j * dp[i - j]);
}
}
return dp[n];
};
时间复杂度On2,状态数组dp初始化为1,从3开始计算。