780. 到达终点
思路:当从起点推向终点,每次会有两个状态 (x+y,y) && (x,x+y) ; 这样会超时
而逆向思维:从终点向起点进行推进,每次只有一个状态(|x-y|,y) || (x,|y-x|); 因为每次的x,y都必须大于等于0
先递推到 tx, ty 两个都等于sx ,sy , 或者 其中一个相等
1)当两个相等 说明可以递推得到起点返回true
ps:我自己做的时候没有想到对ty-sy 模 tx 可以判断,这里借鉴的答案。
2)当有一个值相等,递推另外一个值 **注意:取余操作是为了判断相减后是否可以整除tx|ty **,如果可以说明能够sy+tx相加得到 ty。
3) 返回false
class Solution {
public boole1an reachingPoints(int sx, int sy, int tx, int ty) {
while (tx > sx && ty > sy && tx != ty) {
if (tx > ty) {
tx %= ty;
} else {
ty %= tx;
}
}
if (tx == sx && ty == sy) {
return true;
} else if (tx == sx) {
return ty > sy && (ty - sy) % tx == 0;
} else if (ty == sy) {
return tx > sx && (tx - sx) % ty == 0; //
} else {
return false;
}
}
}