leetcode 2231. 按奇偶性交换后的最大数字,617. 合并二叉树

本文介绍了两种算法问题的解决方案。第一部分涉及将一个整数的奇数和偶数位进行交换以获得最大值,通过遍历和比较奇偶性相同的数字实现。第二部分是合并两个二叉树,通过递归地合并每个节点的值来构建新的二叉树。这两个算法都涉及到有效的数据结构操作和比较策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2231. 按奇偶性交换后的最大数字

给你一个正整数 num 。你可以交换 num 中 奇偶性 相同的任意两位数字(即,都是奇数或者偶数)。

返回交换 任意 次之后 num 的 最大 可能值

示例 1:

输入:num = 1234
输出:3412
解释:交换数字 3 和数字 1 ,结果得到 3214 。
交换数字 2 和数字 4 ,结果得到 3412 。
注意,可能存在其他交换序列,但是可以证明 3412 是最大可能值。
注意,不能交换数字 4 和数字 1 ,因为它们奇偶性不同。

示例 2:

输入:num = 65875
输出:87655
解释:交换数字 8 和数字 6 ,结果得到 85675 。
交换数字 5 和数字 7 ,结果得到 87655 。
注意,可能存在其他交换序列,但是可以证明 87655 是最大可能值。

提示:

  • 1 <= num <= 109

思路:就是把整数转化为字符串数组char[],然后遍历数组i,j=i+1;判断奇数偶数,%2==0,%2!=0,然后判断大小,比他大就交换, char temp=c[i];
                                                                    c[i]=c[j];
                                                                   c[j]=temp;最后还要把字符转化为字符串再转化为整形

class Solution {
    public int largestInteger(int num) {
  char [] c=Integer.toString(num).toCharArray();
for(int i=0;i<c.length;i++){
    for(int j=i+1;j<c.length;j++){
        if(c[i]%2==0&&c[j]%2==0&&c[j]>c[i]){
            char temp=c[i];
            c[i]=c[j];
            c[j]=temp;
        }
        if(c[i]%2!=0&&c[j]%2!=0&&c[j]>c[i]){
            char temp=c[i];
            c[i]=c[j];
            c[j]=temp;
        }
    }
}
    return  Integer.parseInt(String.valueOf(c));
    }
}

617. 合并二叉树

给你两棵二叉树: root1 和 root2 。

想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。

返回合并后的二叉树。

注意: 合并过程必须从两个树的根节点开始。

示例 1:

输入:root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
输出:[3,4,5,5,4,null,7]

示例 2:

输入:root1 = [1], root2 = [1,2]
输出:[2,2]

提示:

  • 两棵树中的节点数目在范围 [0, 2000] 内
  • -104 <= Node.val <= 104

 思路:root1.val+=root2.val,然后递归自己root.left和root1.right然后返回root1

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
      if(root1==null){
          return root2;
      }
if(root2==null){
    return root1;
}
root1.val=root1.val+root2.val;
root1.left=mergeTrees(root1.left,root2.left);
root1.right=mergeTrees(root1.right,root2.right);
return root1;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值