具体思路:
总觉得不拆分不太对,这里存疑;
剪绳子的翻版,以前见过,就感觉这么熟悉;
具体代码:
1.数学:
class Solution {
public:
int integerBreak(int n) {
if(n<=3)
return n-1;
int cnt=n/3;
n=n%3;
if(n==0){
return pow(3,cnt);
}
if(n==1){
cnt--;
return pow(3,cnt)*4;
}
if(n==2){
return pow(3,cnt)*2;
}
return cnt;
}
};
2.DP:
class Solution {
public:
int integerBreak(int n) {
vector <int> dp(n + 1);
for (int i = 2; i <= n; i++) {
int curMax = 0;
for (int j = 1; j < i; j++) {
curMax = max(curMax, max(j * (i - j), j * dp[i - j]));
}
dp[i] = curMax;
}
return dp[n];
}
};