题目:在一根无限长的数轴上,你站在0的位置。终点在target的位置。
每次你可以选择向左或向右移动。第 n 次移动(从 1 开始),可以走 n 步。
返回到达终点需要的最小移动次数
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reach-a-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码
class Solution {
public int reachNumber(int target)
{
int sum= 0;
int i =0;
int a = Math.abs(target);
while(sum<a||(sum-a)%2!=0){
sum+=i;
i++;
}
return i-1;
}
}
target的正负与答案无关,故取正,假设前N步均向右走,如果恰好得到target,则此时就是最少步数,如果无法得到target,则这n步的和值减去target的差为偶数时,我们可以将差值除以2,那么这个值代表的是第i步,反转这一步的方向,则到达target,故我们求到第一次差值为偶数时,得到最小步数,并返回。
例如 target为5时,1+2+3+4+5=15,此时第一次获得偶数差值,为15-5 =10;则10/2=5,即前四步向右,第五步向左即可。