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

部署运行你感兴趣的模型镜像

2231. 按奇偶性交换后的最大数字 - 力扣(LeetCode)

我们要从给定的整数 num 中通过 任意次数的相同奇偶性数字的交换,得到一个最大的可能值。
换句话说,奇数之间可以任意换,偶数之间也可以任意换,目标是让这个数最大。


✅ 解题思路:

  1. num 转换成字符串,方便逐位处理。

  2. 将其中的 奇数位偶数位 分别提取出来,排序(从大到小)。

  3. 从左到右重新构造这个数字:

    • 如果当前数字是奇数,则从排序好的奇数列表中取最大的;

    • 如果是偶数,则从排序好的偶数列表中取最大的。


💡 示例:

比如 num = 65875

  • 数字拆分为:[6, 5, 8, 7, 5]

  • 奇数位数字:[5, 7, 5] → 排序后:[7, 5, 5]

  • 偶数位数字:[6, 8] → 排序后:[8, 6]

然后我们按照原顺序重构:

  • 原顺序第 1 位是 6(偶数) → 用最大偶数 8

  • 原顺序第 2 位是 5(奇数) → 用最大奇数 7

  • 原顺序第 3 位是 8(偶数) → 用次大偶数 6

  • 原顺序第 4 位是 7(奇数) → 用次大奇数 5

  • 原顺序第 5 位是 5(奇数) → 用剩下的奇数 5

结果:[8, 7, 6, 5, 5]87655


✅ Python 实现:

def largest_integer(num: int) -> int:
    digits = list(str(num))
    odds = sorted([int(d) for d in digits if int(d) % 2 == 1], reverse=True)
    evens = sorted([int(d) for d in digits if int(d) % 2 == 0], reverse=True)
    
    result = []
    for d in digits:
        if int(d) % 2 == 0:
            result.append(str(evens.pop(0)))
        else:
            result.append(str(odds.pop(0)))
    
    return int(''.join(result))

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值