题目:原题链接(困难)
标签:数学
解法 | 时间复杂度 | 空间复杂度 | 执行用时 |
---|---|---|---|
Ans 1 (Python) | O ( l o g N ) O(logN) O(logN) | O ( 1 ) O(1) O(1) | 40ms (59.04%) |
Ans 2 (Python) | |||
Ans 3 (Python) |
解法一:
class Solution:
def reachingPoints(self, sx: int, sy: int, tx: int, ty: int) -> bool:
# 处理完全一致的情况
if sx == tx and sy == ty:
return True
# 处理终点坐标小于起点坐标的情况
if tx < sx or ty < sy:
return False
# 令sx<=sy
if sx > sy:
sx, sy, tx, ty = sy, sx, ty, tx
# 不断逆操作,看tx和ty能否转化为sx和sy
while (sx <= tx and sy <= ty) and (sx < tx or sy < ty):
# 令tx<=ty
if tx > ty:
tx, ty = ty, tx
# 当ty是tx的倍数时
if ty % tx == 0:
if sx == tx:
return sy % sx == 0
else: # sx < tx
return False
# 如果tx已经是sx的情况
if sx == tx:
return (ty - sy) % tx == 0
# 将大的一直减到比小的小
ty %= tx
# 令tx<=ty
if tx > ty:
tx, ty = ty, tx
return sx == tx and sy == ty