LeetCode
754. 到达终点数字
链接: link
思路
【假设1】向一个方向(向左 or 向右)移动numMoves次,正好可以到达target。
【假设2】向两个方向(向左 and 向右)移动numMoves次,才能到达target。
将一个数字A从加号变成减号都会使总和减少A*2
由于2*A一定是偶数,所以找到了这个规律后,我们就可以首先只朝一个方向移动
(统一计算将target取绝对值),只有当移动的总距离 sum 的值大于等于target,
并且 sum 减 t arget是偶数,才表示当前情况满足题目要求,
即:满足到达 target 所需的最小移动次数。
代码
class Solution {
public int reachNumber(int target) {
target = Math.abs(target);
int i = 1, sum = 0;
while(sum < target || (sum - target) % 2 != 0){//注意这里是||,只有sum>target&(sum - target) % 2 == 0 不满足循环,才结束
sum += i;
i++;
}
return i - 1;
}
}