754. 到达终点数字
思路
对于从1开始连续相加的自然数,如果将其中某个数(例如k)前面的+号换成-号,总和会减少2k;因此,我们先找到一个连续相加次数n,使得总和刚好>=target,若两者差值为d,若d为偶数,那么只需把d/2前的+号换成-号即可,次数是不变的;若d为奇数,那么看下一次相加的数的奇偶性:若下一个数为奇数,加上它会让总和与target的差值为偶数,次数n+1即可;若下一个数为偶数,那么为了让差值为偶数,我们再加一次即可,即n+2
class Solution {
public int reachNumber(int target) {
int t=Math.abs(target);
int s=0;
int dis=0;
while(dis<t){
s++;
dis+=s;
}
int dt=dis-t;
if(dt%2==0)
return s;
else{
if(s%2==0)
return s+1;
else
return s+2;
}
}
}