如果需要操作整数的位,可以将这个整数作为字符串读入,方便操作。 首先判断读入整数是否本来就是偶数,如果不是再从头遍历找有没有哪一位是偶数,如果存在则和最后一位交换,然后返回。
#include <iostream>
#include <string>
using namespace std;
int func(string s)
{
int n = s.size();
if ((s[n - 1] - '0') % 2 == 0) return stoi(s);
for (int i = 0; i < n; i++)
{
if ((s[i] - '0') % 2 == 0)
{
swap(s[i], s[n - 1]);
return stoi(s);
}
}
return -1;
}
int main()
{
int q;
cin >> q;
while (q--)
{
string x;
cin >> x;
cout << func(x) << endl;
}
return 0;
}
枚举每个位置的情况,画出决策树,一切都好办。
#include <iostream>
using namespace std;
int n, arr[11], res;
bool used[11];
void dfs(int pos)
{
if (pos == n + 1)
{
res++;
return;
}
for (int i = 1; i <= n; i++)
{
if (used[i]) continue;
if (used[arr[i]]) return; // 剪枝
used[i] = true;
dfs(pos + 1);
used[i] = false;
}
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i++) cin >> arr[i];
dfs(1);
cout << res << endl;
return 0;
}
最大路径和 = 当前节点值 + 左子树最大单链和 + 右子树最大单链和。
class Solution {
public:
int res = -0x3f3f3f3f;
int maxPathSum(TreeNode* root) {
dfs(root);
return res;
}
int dfs(TreeNode *root)
{
if (root == nullptr) return 0;
int l = max(0, dfs(root->left)); // 左子树最大单链和
int r = max(0, dfs(root->right)); // 右子树最大单链和
res = max(res, root->val + l + r); // 当前节点最大路径和
return root->val + max(l, r); // 返回当前最大单链和
}
};
本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有