一般思维这个题可能会想到bfs,但是看了题解发现数学法是很不错的选择,这题要是用bfs其实也有点勉强,我目前的理解是算法是解决简化问题的而不是制造问题的,如果可以用很强的数学公式解决也是有限考虑的。
而贝祖定理告诉我们,ax+by=zax+by=z 有解当且仅当 zz 是 x, yx,y 的最大公约数的倍数。因此我们只需要找到 x, yx,y 的最大公约数并判断 zz 是否是它的倍数即可。
之前好像有个新闻还报道过这个小女孩。
牵扯到数学,还是py好用,go直接拉跨。
class Solution: def canMeasureWater(self, x: int, y: int, z: int) -> bool: if x + y < z: return False if x == 0 or y == 0: return z == 0 or x + y == z return z % math.gcd(x, y) == 0
end
来源:https://www.cnblogs.com/CherryTab/p/12543522.html