343. 整数拆分
class Solution {
public:
int integerBreak(int n) {
if(n <= 2)
return 1;
int dp[n+1];
dp[1] = 1;
dp[2] = 1;
for(int i=3;i<=n;++i){
dp[i] = 1;
for(int j=1;j<i;++j)
dp[i] = max(dp[i], max(dp[i-j] * j, (i-j) * j));
// cout << i << " " << dp[i] << endl;
}
return dp[n];
}
};
91. 解码方法
class Solution {
public:
int numDecodings(string s) {
int s_len = s.size();
int dp[s_len][2];
if(s[0] == '0')
return 0;
dp[0][0] = 1;
dp[0][1] = 0;
int num1, num2;
for(int i=1;i<s_len;++i){
num1 = s[i-1] - '0';
num2 = s[i] - '0';
if(num1 == 0 || num1 * 10 + num2 > 26)
dp[i][1] = 0;
else
dp[i][1] = (i-2 >= 0 ? (dp[i-2][0] + dp[i-2][1]) : 1);
if(num2 == 0)
dp[i][0] = 0;
else
dp[i][0] = dp[i-1][0] + dp[i-1][1];
if(!dp[i][0] && !dp[i][1])
return 0;
}
return dp[s_len-1][1] + dp[s_len-1][0];
}
};