0%

LeetCode365.水壶问题

LeetCode365.水壶问题

这题我只会数学解法,太菜了😭

其实第一眼没有思路,瞄了一眼标签是“数学”,就开始推公式
假设容量为x升的水壶进行了a次操作,容量为y升的水壶进行了b次操作,最终两水壶中的水总共是z升。可以得到公式:

emm,好眼熟的公式,好像是斐蜀定理。。。

斐蜀定理

对于任意正整数a,b,那么一定存在非零整数x,y,使得

再扩展一下,对于这道题的方程
当且仅当时该二元不定方程才有整数解。因此这道题就可以解决了。
也就意味着当时应满足:,OK了。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
int gcd(int a, int b)
{
return b == 0 ? a : gcd(b, a % b);
}
bool canMeasureWater(int x, int y, int z) {
if(!x || !y)
{
if(x == z || y == z) return true;
else return false;
}
if(x + y < z) return false;
return !(z % gcd(x, y));
}

好像还有BFS的解法,打算再看一下。