leetcode-365

110 阅读1分钟

题目描述:具体描述见原题,简单来说就是按照规则装水。

解题思路:感觉这是一道数学题,只需要判断三个数之间是否满足一定条件即可。具体过程见代码。

具体代码:

func canMeasureWater(x int, y int, z int) bool {
   if z == 0 {
      return true
   }

   // 两个水壶都不够装
   if x+y < z {
      return false
   }

   // 此段以后,需要 x <= y
   if x > y {
      x, y = y, x
   }

   // 只有一个水壶的话,
   // 只能提供另一个水壶的容量
   if x == 0 {
      return y == z
   }

   // y%x == 0 时,
   // x 是初始 x 和 y 的最大公约数
   // z%x == 0 的容量都可以提供
   for y%x != 0 {
      x, y = y%x, x
   }

   return z%x == 0
}

补充说明:这真是一道数学题。