【LeetCode - 每日1题】最少操作使num1归零
🌈 个人主页:(时光煮雨)
🔥 高质量专栏:vulnhub靶机渗透测试
👈 希望得到您的订阅和支持~
💡 创作高质量博文(平均质量分95+),分享更多关于网络安全、Python领域的优质内容!(希望得到您的关注~)
🌵目录🌵
- 难度 ⭐⭐⭐
- ✅ 题目回顾
- ✅ 示例分析
-
- ✅ 示例1
- ✅ 示例2
- ✅ 解题思路
-
- 🍒核心逻辑
- 🍓关键创新点
- ✅ 代码实现
- ✅ 代码说明
- ✅ 复杂度分析
- ✅ 测试用例验证
-
- ✅ 示例1
- ✅ 示例2
- ✅ 边缘用例
- ✅ 总结
- 🤝 期待与你共同进步
- 📚 参考文档
难度 ⭐⭐⭐
✅ 题目回顾
任务目标:
给定两个整数 num1和 num2,每次操作选择一个整数 i(0 ≤ i≤ 60),将 num1减去 (2^i + num2)。计算使 num1变为 0 的最少操作次数,若无法实现则返回 -1。
✅ 示例分析
✅ 示例1
输入:num1 = 3, num2 = -2
输出:3
解释:
通过 3 次操作将 num1变为 0:
- 选 i=2:3 - (4 + (-2)) = 1
- 选 i=2:1 - (4 + (-2)) = -1
- 选 i=0:-1 - (1 + (-2)) = 0
✅ 示例2
输入:num1 = 5, num2 = 7
输出:-1
解释:
无论选择何种 i,都无法将 5变为 0。
✅ 解题思路
🍒核心逻辑
🍓关键创新点
- 二进制特性利用:通过 x的二进制中 1 的个数确定最小拆分项数,再通过幂次拆分调整项数至 k。
- 高效枚举策略:使用无限枚举但实际在有限步内终止(理论证明 k上限为 O(log(num1)))。
✅ 代码实现
from itertools import countclass Solution:def makeTheIntegerZero(self, num1: int