1276. 不浪费原料的汉堡制作方案
大约 2 分钟
---
1276. 不浪费原料的汉堡制作方案
- 标签:数学
- 难度:中等
题目链接
题目大意
描述:给定两个整数 和 ,分别表示番茄片和奶酪片的数量。制作一个巨无霸汉堡需要 片番茄和 片奶酪,制作一个小皇堡需要 片番茄和 片奶酪。
要求:返回 使得恰好用完所有原料。如果无法恰好用完,返回 。
说明:
- 。
- 。
示例:
- 示例 1:
输入:tomatoSlices = 16, cheeseSlices = 7
输出:[1, 6]
解释:制作 1 个巨无霸和 6 个小皇堡需要 4×1+2×6=16 片番茄和 1+6=7 片奶酪。- 示例 2:
输入:tomatoSlices = 17, cheeseSlices = 4
输出:[]
解释:只靠整数个汉堡无法恰好用完。- 示例 3:
输入:tomatoSlices = 4, cheeseSlices = 17
输出:[]解题思路
思路 1:数学解方程组
1. 核心思想
这是一道经典的鸡兔同笼问题(二元一次方程组)。
设巨无霸汉堡数量为 ,小皇堡数量为 。根据题意:
解方程组:
由第二个方程得 ,代入第一个方程:
2. 合法解的条件
解必须满足:
- 是非负整数: 必须是偶数且 。
- 是非负整数。
- 代入验证原方程(确保 ,但根据推导,条件 1 已经隐含了这个等式的正确性)。
3. 具体步骤
第 1 步:计算 。
第 2 步:如果 是偶数且 ,且 ,返回 。
第 3 步:否则返回 。
4. 结合示例走一遍
,,返回 。
不是整数,返回 。
思路 1:代码
class Solution:
def numOfBurgers(self, tomatoSlices: int, cheeseSlices: int) -> List[int]:
# 解方程组
# 4x + 2y = tomato
# x + y = cheese
if (tomatoSlices - 2 * cheeseSlices) % 2 != 0:
return []
x = (tomatoSlices - 2 * cheeseSlices) // 2
y = cheeseSlices - x
if x >= 0 and y >= 0:
return [x, y]
return []思路 1:复杂度分析
- 时间复杂度:,只需常数次计算。
- 空间复杂度:,只使用常数个变量。