LC754.到达终点数字
题目:
在一根无限长的数轴上,你站在0的位置。终点在target的位置。
你可以做一些数量的移动 numMoves :
每次你可以选择向左或向右移动。
第 i 次移动(从 i == 1 开始,到 i == numMoves ),在选择的方向上走 i 步。
给定整数 target ,返回 到达目标所需的 最小 移动次数(即最小 numMoves ) 。
示例:
输入:target = 2
输出:3
第一次移动,从 0 到 1.
第二次移动,从 1 到 -1.
第三次移动,从 -1 到 2.
题目解读:
【移动方向】想左或者向右移动
【移动距离】第几次移动就移动多远
第一步,移动距离1
第二步,地洞距离2
第三步,移动距离3
…
第N步,移动距离N
我们要从起点以最小移动次数达到 target
从起点到达 target 的几种可能
- 向着一个方向一直移动就能达到
target,此时直接返回numMoves. - 需要向左右两边移动到达
target,移动numMoves到达target.
解题思路:
第一种情况我们就不说了。
第二种情况:
首先将 target 转换成正数,因为 targte 正负的操作都一样,只是移动的方向不一样,为了方便计算,我们直接将其转换成整数。 Python 中的 abs()
从以上图中得到一个结论,若沿着一个方向移动会超过 target 那么我们中间一定是要向相反的方向移动。
那么只要我们 移动总数 超过 target 偶数,那么我们就可以通过将 + 改成 - 到达 targte。
解题思路:
1 | def reachNumber(target: int) -> int: |
1 | 来源:力扣(LeetCode) |
评论

