https://leetcode-cn.com/problems/reach-a-number/description/
public static int reachNumber(int target)
{
//1+2+3+4+5+6......+max=target
//先确认全加/全减情况下 大于/小于target的极端情况
int times=1;
int sum=0;
if(target<0)
{
target=-target;
}
while(sum<target)
{
sum=sum+times;
times++;
}
times--;
//得到最大步骤数
//例如 target为10 此时向右1+2+3+4=10 刚好4步
//target为11 此时1+2+3+4+5=15 差值为4 为偶数 为偶数的情况下意味着将原本的某个加号改为减号
//二者差值即为偶数 故将差值4的一半 即原本的+2改为-2 1-2+3+4+5为11 步骤仍为5步
//target为12 此时1+2+3+4+5+6=21 差值为9 根据刚才的思路 只改一个符号并不能得到target
//此时有两种情况 在target为12的例子中 目前的步骤数为6 那么下一步为7 为奇数 两奇数得到偶数 故回到差值为偶数的情况 加一步即可
//那么再举一个例子 target为14时 1+2+3+4+5=15 差值为1 而下一步为+6/-6 得到的差值为7/5仍为奇数 又需要一步
//故得到所有情况
int chazhi=Math.abs(sum-target);
if(chazhi%2==0)
{
return times;
}
else
{
if(times%2==0)
{
return times+1;
}
else
{
return times+2;
}
}