LeetCode-780 到达终点
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reaching-points
题目描述
给定四个整数 sx , sy ,tx 和 ty,如果通过一系列的转换可以从起点 (sx, sy) 到达终点 (tx, ty),则返回 true,否则返回 false。
从点 (x, y) 可以转换到 (x, x+y) 或者 (x+y, y)。
示例 1:
输入: sx = 1, sy = 1, tx = 3, ty = 5
输出: true
解释:
可以通过以下一系列转换从起点转换到终点:
(1, 1) -> (1, 2)
(1, 2) -> (3, 2)
(3, 2) -> (3, 5)
示例 2:
输入: sx = 1, sy = 1, tx = 2, ty = 2
输出: false
示例 3:
输入: sx = 1, sy = 1, tx = 1, ty = 1
输出: true
提示:
1 <= sx, sy, tx, ty <= 109
解题思路
很有趣的一道逆向思维题,如果正向来判断(sx, sy)到达(tx, ty)必然是十分困难的,如果是单次相加,那么时间复杂度会超出,如果是相乘,那么被乘数是无法确定的。但是如果从(tx, ty)反推回(sx, sy)是十分容易的,因为没必要关注中间相减的过程,直接使用取模运算就可以看出从(tx, ty)可以到达(sx, sy),如果使用单次相减就会超时。
逆推过程中,当x和y相等的时候,那么坐标就无法进行变换了,因为下一次逆推的结果坐标中会出现0,不符合题意,所以在x和y不相等的时候,同时,x和y分别都比sx,sy大的时候,将大的那个值对小的那个取模,逆推回去,在最终无法变换时进行状态的判断。
如果(x,y)等于(sx,sy)很显然,可以到达(sx,sy),如果x == sx,那么此时可以操作的坐标仅仅就是y,需要判断sy是否可以通过相加n个x等于了y,此时将y-sy对x取模,判断是否等于0就可以了,不能使用y对x取模判断余数为sy这种方法,因为如果sy可以被x整除,会产生错误的判断。同理,对于y == sy的情况也一样,如果x和y都不等于sx和sy,那么x和y无法达到sx和sy。
代码展示
class Solution {
public:
bool check(int x, int y, int sx, int sy)
{
if(x == sx && y == sy)
return true;
else if(x == sx && y > sy)
return (y - sy) % x == 0;
else if(y == sy && x > sx)
return (x - sx) % y == 0;
else
return false; }
bool reachingPoints(int sx, int sy, int tx, int ty) {
int x = tx, y = ty;
while(x != y && x > sx && y > sy)
{
if(x > y)
x = x % y;
else
y = y % x;
}
return check(x, y, sx, sy);
}
};
运行结果
LeetCode-780 到达终点的更多相关文章
- Java实现 LeetCode 780 到达终点(逻辑题)
780. 到达终点 从点 (x, y) 可以转换到 (x, x+y) 或者 (x+y, y). 给定一个起点 (sx, sy) 和一个终点 (tx, ty),如果通过一系列的转换可以从起点到达终点,则 ...
- Java实现 LeetCode 754 到达终点数字(暴力+反向)
754. 到达终点数字 在一根无限长的数轴上,你站在0的位置.终点在target的位置. 每次你可以选择向左或向右移动.第 n 次移动(从 1 开始),可以走 n 步. 返回到达终点需要的最小移动次数 ...
- LeetCode 754. Reach a Number到达终点数字
题目 在一根无限长的数轴上,你站在0的位置.终点在target的位置. 每次你可以选择向左或向右移动.第 n 次移动(从 1 开始),可以走 n 步. 返回到达终点需要的最小移动次数. 示例 1: 输 ...
- [Swift]LeetCode754. 到达终点数字 | Reach a Number
You are standing at position 0 on an infinite number line. There is a goal at position target. On ea ...
- [Swift]LeetCode780. 到达终点 | Reaching Points
A move consists of taking a point (x, y) and transforming it to either (x, x+y) or (x+y, y). Given a ...
- hdoj 1010 Tempter of the Bone【dfs查找能否在规定步数时从起点到达终点】【奇偶剪枝】
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- 领扣-754 到达终点数字 Reach a Number MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 一只青蛙一次可以跳1阶或者2阶,n阶,有多少种到达终点的方式。
前两天面试遇到的一个题,当时没有想清楚,今天想了一下,po出来: # -*-encoding:utf-8-*- import sys end = 0 # 终点 cnt = 0 # 统计组合方式 def ...
- [LeetCode] 780. Reaching Points 到达指定点
A move consists of taking a point (x, y) and transforming it to either (x, x+y) or (x+y, y). Given a ...
- LeetCode 780. Reaching Points
题目链接:https://leetcode.com/problems/reaching-points/ 题意:给定操作可以使点(x,y)变为点(x+y,y)或者点(x,x+y).现已知初始点(sx,s ...
随机推荐
- Jenkins&&gitlab
DevOps 强调整个组织的合作以及交付和基础设施变更的自动化 gitlab下载: 下载地址: https://docs.gitlab.com/ee/install/requirements.html ...
- 还原火山引擎 A/B 测试产品——DataTester 私有化部署实践经验
作为一款面向ToB市场的产品--火山引擎A/B测试(DataTester)为了满足客户对数据安全.合规问题等需求,探索私有化部署是产品无法绕开的一条路. 在面向ToB客户私有化的实际落地中,火 ...
- 终于弄明白了 RocketMQ 的存储模型
RocketMQ 优异的性能表现,必然绕不开其优秀的存储模型 . 这篇文章,笔者按照自己的理解 , 尝试分析 RocketMQ 的存储模型,希望对大家有所启发. 1 整体概览 首先温习下 Rocket ...
- [python]《Python编程快速上手:让繁琐工作自动化》学习笔记4
1. 处理Excel 电子表格笔记(第12章)(代码下载) 本文主要介绍openpyxl 的2.5.12版处理excel电子表格,原书是2.1.4 版,OpenPyXL 团队会经常发布新版本.不过不用 ...
- MySQL优化三,SQL语法
## 1.3.MySQL调优 前言:在前面的基础之上把相应的数据库表设计得很完美,建立了好用的索引,如果SQL语句中没有使用到相应索引的话,也是白搭,如何设计好一点的SQL,则是一大问题 ### 1. ...
- 【RocketMQ】负载均衡源码分析
RocketMQ在集群模式下,同一个消费组内,一个消息队列同一时间只能分配给组内的某一个消费者,也就是一条消息只能被组内的一个消费者进行消费,为了合理的对消息队列进行分配,于是就有了负载均衡. 接下来 ...
- 10分钟做好 Bootstrap Blazor 的表格组件导出 Excel/Word/Html/Pdf
上篇: Bootstrap Blazor 实战 通用导入导出服务(Table组件) 1.新建工程 新建工程b14table dotnet new blazorserver -o b14table 将项 ...
- Winform DataGridViewTextBoxCell 编辑添加右键菜单,编辑选中文本
如上是我们使用DataGridView时,编辑单元格右键会出现系统菜单.现在我们添加自己的右键菜单,并可以操作选中文字. DataGridViewTextBoxCell: DataGridViewTe ...
- 最好用的在线图片压缩工具——TinyPNG
前言 不知道大家在写博客或者工作时有没有这种烦恼呢?想要上传某张图片,但却因为图片文件过大而导致无法上传.这时你可能会去百度搜索关于图片压缩的软件,但往往下载的软件都是那种"垃圾软件&quo ...
- Go语言的template
html/template包实现了数据驱动的模板,用于生成可防止代码注入的安全的HTML内容.它提供了和 text/template包相同的接口,Go语言中输出HTML的场景都应使用html/temp ...