755. Reach a Number

You are standing at position 0 on an infinite number line. There is a goal at position target.

On each move, you can either go left or right. During the n-th move (starting from 1), you take n steps.

Return the minimum number of steps required to reach the destination.

Example 1:

Input: target = 3
Output: 2
Explanation:
On the first move we step from 0 to 1.
On the second step we step from 1 to 3.

Example 2:

Input: target = 2
Output: 3
Explanation:
On the first move we step from 0 to 1.
On the second move we step  from 1 to -1.
On the third move we step from -1 to 2.

Note:

target will be a non-zero integer in the range  [-10^9, 10^9].

DFS会超时,

数学解法

class Solution:
    def reachNumber(self, target):
        """
        :type target: int
        :rtype: int
        """
        target, t, step = abs(target), 0, 1
        while 1:
            t += step
            if t==target: return step
            if t>target and (t-target)%2==0: return step
            step += 1
    
        


你可能感兴趣的:(LeetCode其他)