当前位置: 首页 > news >正文

Kimi LeetCode 3791. 给定范围内平衡整数的数目 Python3实现

以下是 LeetCode 3791. 给定范围内平衡整数的数目 的 Python3 实现。

题目理解

一个整数是平衡的,当且仅当:
1. 至少包含两位数字
2. 奇数位数字之和等于偶数位数字之和(最左边数字位置为1)

约束:`1 <= low <= high <= 10^15`,需要使用数位 DP。

Python3 实现

```python
from functools import lru_cache

class Solution:
def countBalanced(self, low: int, high: int) -> int:
# 如果 high < 11,范围内没有至少两位的数,直接返回0
if high < 11:
return 0

# 计算 [0, x] 中平衡整数的个数
def calc(x: int) -> int:
s = str(x)
n = len(s)

@lru_cache(maxsize=None)
def dfs(pos: int, diff: int, is_limit: bool, is_num: bool) -> int:
# pos: 当前处理到的位置
# diff: 奇数位和 - 偶数位和
# is_limit: 是否受上界限制
# is_num: 是否已经填了非前导零的数字

if pos == n:
# 必须至少两位,且差值为0
return 1 if is_num and diff == 0 else 0

res = 0
up = int(s[pos]) if is_limit else 9

for d in range(up + 1):
if not is_num and d == 0:
# 前导零,继续跳过
res += dfs(pos + 1, diff, False, False)
else:
# 计算当前位的贡献
# pos 从0开始,对应第1位(奇数位)
if is_num:
# 已经有数字了,当前位根据 pos 的奇偶性
# pos 是字符串索引,已经填了前导零后的实际位置需要重新算
# 这里用 digit_count 记录已经填了多少位
pass # 下面用另一种更清晰的方式

return res

# 上面的写法不太对,换一种更清晰的
pass

# 重新写,不用 is_num,直接处理
def count(x: int) -> int:
s = str(x)
n = len(s)

@lru_cache(maxsize=None)
def dfs(pos: int, diff: int, is_limit: bool, started: bool, digit_count: int) -> int:
if pos == n:
# 必须已经开始(至少一位),且至少两位,且差值为0
return 1 if started and digit_count >= 2 and diff == 0 else 0

res = 0
up = int(s[pos]) if is_limit else 9

for d in range(up + 1):
if not started and d == 0:
# 还是前导零
res += dfs(pos + 1, diff, False, False, 0)
else:
# 当前是第 digit_count+1 位(从1开始计数)
new_count = digit_count + 1
# 奇数位加,偶数位减
new_diff = diff + d if new_count % 2 == 1 else diff - d
res += dfs(pos + 1, new_diff, is_limit and d == up, True, new_count)

return res

return dfs(0, 0, True, False, 0)

return count(high) - count(low - 1)
```

更简洁的版本(不带前导零处理,因为题目要求至少两位)

```python
from functools import lru_cache

class Solution:
def countBalanced(self, low: int, high: int) -> int:

def count(x: int) -> int:
if x < 11:
return 0
s = str(x)
n = len(s)

@lru_cache(maxsize=None)
def dfs(pos: int, diff: int, is_limit: bool) -> int:
# pos: 当前处理到的位置 (0-indexed)
# diff: 奇数位和 - 偶数位和
# is_limit: 是否受上界限制

if pos == n:
return 1 if diff == 0 else 0

res = 0
up = int(s[pos]) if is_limit else 9

for d in range(up + 1):
# pos 从0开始,对应第1位(奇数位)
# 奇数位(pos%2==0,即第1,3,5...位)加 d
# 偶数位(pos%2==1,即第2,4,6...位)减 d
new_diff = diff + d if pos % 2 == 0 else diff - d
res += dfs(pos + 1, new_diff, is_limit and d == up)

return res

return dfs(0, 0, True)

return count(high) - count(low - 1)
```

复杂度分析

- 时间复杂度:`O(log M × D²)`,其中 `M = high`,`D = 10`
- 空间复杂度:`O(log M × D)`,主要是 `lru_cache` 的缓存空间

关键要点

1. 数位奇偶性:`pos % 2 == 0` 对应第1、3、5...位(奇数位,从1开始计数),加 `d`;否则减 `d`
2. 差值 diff:`diff = 奇数位和 - 偶数位和`,最终需要 `diff == 0`
3. 范围计算:`count(high) - count(low - 1)` 得到 `[low, high]` 范围内的平衡整数个数
4. 边界处理:`x < 11` 时返回0,因为单个数字不可能平衡

http://www.jsqmd.com/news/1297465/

相关文章:

  • 北海母婴除甲醛公司测甲醛中心怎么选:金耀母婴除甲醛标准、流程、避坑指南 - 信誉隆金银铂奢回收
  • C++26新特性实战——静态反射与std::expected,面试必问的新考点
  • 华为MetaERP Oracle EBS 与 Oracle Fusion 在库存成本核算方面的详细对比,涵盖各业务场景及对应的会计核算分录。成本方法概览Oracle EBSEBS 支持以下成本方
  • 西门子伺服驱动器接口详解:从电源到通讯的完整接线指南
  • STM32嵌入式入门实战:按键与光敏传感器控制LED与蜂鸣器
  • 2026下半年武汉云祺灾备系统选型指南:找到有实力的机构联系方式 - 装修教育财税推荐2026
  • 2026上海工厂选生产管理系统当心!90%企业都踩过的选型大坑
  • 三个系统都能查,为什么就是查不到一条完整的订单——跨系统语义打通的工程逻辑
  • 上架检快速定位APK隐私风险
  • STM32定时器硬件同步:多轴电机控制与数据采集的精准时序解决方案
  • 湖南文旅vi设计包含哪些核心要素及视觉规范有哪些讲究?
  • AI音乐创业生死线:旋律生成合规性审计清单(含ISRC注册、AI成分披露模板、平台分账协议条款),错过即踩雷
  • 机票+酒店+小众景点联动规划失效?揭秘LLM在时空约束建模中的4个关键断点及修复公式
  • AI辅助生成视频笔记:四款工具的技术对比与实测记录
  • QtScrcpy架构解析:Android实时屏幕镜像与控制系统的技术实现深度
  • 2026 年现阶段三山可靠的花纹铝板生产厂家哪家靠谱,这种铺在车间地面的玩意儿,竟能承受百吨重物碾压还完好?-朝阳铝业 - 行业推荐【认证官】
  • 本溪母婴除甲醛公司测甲醛中心怎么选:金耀母婴除甲醛标准、流程、避坑指南 - 信誉隆金银铂奢回收
  • 2026上海怎么选合适的生产管理系统,拒绝系统沦为摆设
  • CPU性能评估实战指南:从核心指标到场景化诊断与选型
  • 如何在5分钟内免费打造你的专属桌面互动猫咪:BongoCat终极指南
  • STM32F103C8T6开发环境搭建:Keil+CubeMX从零到点灯
  • 一言(简版)API故障定位指南:基于真实错误的排查与修复
  • 南芯科技押注电源管理新战场,4.59亿元项目仍待客户验证
  • STM32 GPIO入门:从硬件连接到软件配置,彻底解决LED不亮问题
  • MHmarkets:用清单方式看外汇市场服务体验,更容易形成稳定判断
  • STM32 ADC从原理到实战:HAL库配置、精度提升与多通道采集指南
  • Agent开始“自我进化”:会出题、会反思,还会自己长出新技能
  • 毕节母婴除甲醛公司测甲醛中心怎么选:金耀母婴除甲醛标准、流程、避坑指南 - 信誉隆金银铂奢回收
  • 2026年杭州中考专业的辅导机构推荐榜单 - 品牌排行榜
  • gin.Context 解析