797. 到达一个数字
中文English
你站在一个无穷数轴上的 0 位置。在位置目标上有一个目标。
在每一个动作中,你可以向左或向右。在第n次移动中(从1开始),你行走n步。
返回到达目的地所需的最小步骤数。
样例
样例1
输入: target = 3 输出: 2 解释: 在第一步,我们从0到1。 在第二步,我们从1到3。
样例2
输入: target = 2 输出: 3 解释: 在第一步,我们从0到1。 在第二个步骤中,我们从1到-1。 在第三步,从-1到2。
注意事项
目标将是一个非零的整数范围[-10^9, 10^9]。
class Solution:
"""
@param target: the destination
@return: the minimum number of steps
"""
'''
大致步骤:
1.不管目标是正数还是负数,都可以当做正数来计数,步骤数是一样的
2.涉及到回退的问题,所以得用另一个方法。首先可以将步数相加,直到大于或等于目标数,然后根据相加得到的步数-目标数 ,如果为偶数的话
那么偶数/2这个步数需要从正数改为负数,既可以实现双倍的反方向步数。如果为奇数的话,那么需要在加上一个奇数为止(可能下一个数是偶数),直到
相加得到的步数和-目标数为偶数即可,然后根据之前偶数的方法,将偶数/2正数改为负数即可。
'''
def reachNumber(self,target):
target = abs(target)
count = 0
i = 0
sum = 0
while True:
count += 1
i += 1
sum += i
if sum == target:
return count
elif sum> target:
#判断是否步数之和-目标数是否是奇数还是偶数
num = sum - target
if num%2 == 0:
#将num/2这个数符号正数改为负数既可以实现,count不变
return count
##如果为奇数的话,不处理,直到步数和-目标数为偶数的时候为止,就会return
elif num%2 == 1:
continue
来源:https://www.cnblogs.com/yunxintryyoubest/p/12551646.html