654. 最大二叉树
代码实现(自解)
class Solution {
public:
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
if (!nums.size()) return NULL;
auto it = max_element(nums.begin(), nums.end());
TreeNode* root = new TreeNode(*it);
vector<int> left = {nums.begin(), it};
vector<int> right = {it + 1, nums.end()};
root->left = constructMaximumBinaryTree(left);
root->right = constructMaximumBinaryTree(right);
return root;
}
};
415. 字符串相加
代码实现(自解)
class Solution {
public:
string addStrings(string num1, string num2) {
bool flag = false;
int pnum1 = num1.size() - 1;
int pnum2 = num2.size() - 1;
string ans = "";
int tmp = 0;
while (pnum1 >= 0 && pnum2 >= 0) {
tmp = int(num1[pnum1] - 48) + int(num2[pnum2] - 48) + flag;
ans = char(tmp % 10 + 48) + ans;
if (tmp >= 10) flag = true;
else flag = false;
pnum1--;
pnum2--;
}
while (pnum1 >= 0) {
if (flag) {
tmp = num1[pnum1--] - 48 + flag;
ans = char(tmp % 10 + 48) + ans;
if (tmp <= 9) flag = false;
}
else {
ans.insert(0, num1.substr(0, pnum1 + 1));
break;
}
}
while (pnum2 >= 0) {
if (flag) {
tmp = num2[pnum2--] - 48 + flag;
ans = char(tmp % 10 + 48) + ans;
if (tmp <= 9) flag = false;
}
else {
ans.insert(0, num2.substr(0, pnum2 + 1));
break;
}
}
if (flag) ans = '1' + ans;
return ans;
}
};
409. 最长回文串
代码实现(部分看题解)
class Solution {
public:
int longestPalindrome(string s) {
map<char, int> mp;
int ans = 0;
for (char c : s) {
mp[c]++;
}
for (auto pa : mp) {
int tmp = pa.second;
ans += tmp / 2 * 2;
if (tmp % 2 && !(ans % 2)) ans++;
}
return ans;
}
};