到达终点数字
题目描述:
在一根无限长的数轴上,你站在0的位置。终点在target的位置。
每次你可以选择向左或向右移动。第 n 次移动(从 1 开始),可以走 n 步。
返回到达终点需要的最小移动次数。
示例 :
输入: target = 3
输出: 2
解释:
第一次移动,从 0 到 1 。
第二次移动,从 1 到 3 。
提示:
- target是在[-109, 109]范围中的非零整数。
解法
首先如果 target 是负数,那么可以取相反数,结果是一样的。然后进行模拟,先一直往右走,直到等于或者超过 target。如果超过 target 的部分是偶数,那么可以通过左移来到达 target;如果是奇数,而恰巧下一次能走的步数也是奇数,那么只需要再来一次;如果下一次能走的步数是偶数,那么还需要来两次。
代码
class Solution:
def reachNumber(self, target: int) -> int:
if target < 0:
target = -target
n = 0
while target > 0:
n += 1
target -= n
return n if target % 2 == 0 else n + 1 + n % 2
测试结果
执行用时:88 ms, 在所有 Python3 提交中击败了 63.71% 的用户
内存消耗:14.9 MB, 在所有 Python3 提交中击败了 65.32% 的用户
说明
算法题来源:力扣(LeetCode)