754. Reach a Number

QUESTION:

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].

EXPLANATION:

1.首先正数和负数的步数是一样的 2.需要找出大于target的第一个减去target的结果是偶数的 3.因为偶数的时候,你可以将结果一半进行翻转操作。 4.相当于这样的一个操作 ===—- 相交的点是0,最后的结果是target,而双线的部分就是 目前的 index-target的余数,然后再进行重叠,那么就能够得到结果了。

SOLUTION:

class Solution {
    public int reachNumber(int target) {
        int step = 0,index = 0;
        target = Math.abs(target);
        while (index<target||(index-target)%2!=0){
            step++;
            index+=step;
        }
        return step;
    }
}