LeetCode 712. 兩個字符串的最小ASCII刪除和
給定兩個字符串s1, s2
既峡,找到使兩個字符串相等所需刪除字符的ASCII值的最小和。
示例 1:
輸入: s1 = "sea", s2 = "eat"
輸出: 231
解釋: 在 "sea" 中刪除 "s" 并將 "s" 的值(115)加入總和禽拔。
在 "eat" 中刪除 "t" 并將 116 加入總和。
結(jié)束時事镣,兩個字符串相等或南,115 + 116 = 231 就是符合條件的最小和。
示例 2:
輸入: s1 = "delete", s2 = "leet"
輸出: 403
解釋: 在 "delete" 中刪除 "dee" 字符串變成 "let"肴敛,
將 100[d]+101[e]+101[e]
加入總和署海。在 "leet" 中刪除 "e" 將 101[e]
加入總和。
結(jié)束時医男,兩個字符串都等于 "let"砸狞,結(jié)果即為 100+101+101+101 = 403 。
如果改為將兩個字符串轉(zhuǎn)換為 "lee" 或 "eet"镀梭,我們會得到 433 或 417 的結(jié)果刀森,比答案更大。
</pre>
注意:
-
0 < s1.length, s2.length <= 1000
报账。 - 所有字符串中的字符ASCII值在
[97, 122]
之間研底。
我的答案:
class Solution {
public:
int minimumDeleteSum(string s1, string s2) {
int map[s1.length()+1][s2.length()+1];
map[0][0] = 0;
int i,j;
for(i=1; i<=s1.length();i++){
map[i][0] = map[i-1][0] + (int)s1[i-1];
}
for(i=1; i<=s2.length();i++){
map[0][i] = map[0][i-1] + (int)s2[i-1];
}
for(i=1; i<=s1.length();i++){
for(j=1; j<=s2.length(); j++){
if(s1[i-1] == s2[j-1]) {
map[i][j] = map[i-1][j-1];
}
else{
map[i][j] = min(map[i-1][j]+(int)s1[i-1], map[i][j-1]+(int)s2[j-1]);
}
}
}
return map[i-1][j-1];
}
};
LeetCode 343. 整數(shù)拆分
給定一個正整數(shù) n,將其拆分為至少兩個正整數(shù)的和笙什,并使這些整數(shù)的乘積最大化飘哨。 返回你可以獲得的最大乘積。
示例 1:
輸入: 2
輸出: 1
解釋: 2 = 1 + 1, 1 × 1 = 1琐凭。
示例 2:
輸入: 10
輸出: 36
解釋: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36芽隆。
**說明: **你可以假設(shè)n不小于 2 且不大于 58。
我的答案:
class Solution {
public:
int integerBreak(int n) {
int res = 1;
if(n%3 == 0){
if(n == 3) return 2;
for(int i=0; i<n/3; i++){
res *= 3;
}
}
else if(n%3 == 1){
for(int i=0; i<n/3-1; i++){
res *= 3;
}
res *= 4;
}
else if(n%3 == 2){
if(n == 2) return 1;
for(int i=0; i<n/3; i++){
res *= 3;
}
res *= 2;
}
return res;
}
};