数学题了属于是。
target正负无所谓,因为是对称的。因此为了方便操作,这里把target全都变为正的
对于连续递增的i
,我们要做的就是把其中一个数变成负数(为什么不是几个数:因为对于连续的i来说,其中任意一个数总能拆成几个由[1,i]
组成的数),然后让i
的和sum
等于target
。
注意对连续递增的i
中的数,修改j [1, i]
的符号时,对和sum
的影响是j * 2
class Solution {
public:
int reachNumber(int target) {
if(target < 0)
target = - target;
int i = 1;
int sum = 0;
while(1)
{
sum += i;
if(sum >= target && (sum - target) % 2 == 0)
return i;
i++;
}
return 0;
}
};