题目描述
思路
辗转相除法
根据题意,显然tx和ty分别大于等于sx和sy,则tx和ty中的大一点的数,就一定是由小一点的数加了k次得到,可以直接取余。
最终判断是否有一个相等且另一个和起始值的差是另一个起始值的整数倍即可。
class Solution:
def reachingPoints(self, sx: int, sy: int, tx: int, ty: int) -> bool:
while tx > sx and ty > sy:
tx, ty = (tx % ty, ty) if tx > ty else (tx, ty % tx)
return (tx == sx and ty >= sy and not (ty - sy) % sx) or (ty == sy and tx >= sx and not (tx - sx) % sy)
class Solution {
public boolean reachingPoints(int sx, int sy, int tx, int ty) {
while(tx > sx && ty > sy) {
if(tx > ty)
tx = tx % ty;
else
ty = ty % tx;
}
return (tx == sx && ty >= sy && (ty - sy) % sx == 0) || (ty == sy && (tx >= sx) && (tx -sx) % sy == 0);
}
}