1.题目描述:
给定一个目标整数(正、负均可)。问到达目标整数所需要的最少移动次数是多少?
移动规则:第 i次移动可以移动i 步,每一步可以向左或者向右移动(刚开始这个英文没看仔细,结果纠结半天)。
2.
例子1:
输入: target = 3
输出: 2
解释:
第一步0到1.
第二步2到3.
例子2:
输入: 目标 = 2
输出: 3
解释:
第一步0到1.
第二步2到-1.
第三步-1到2.
3.思路与代码:
(1)由于可以向左向右移动因此目标不管是正数或者负数结果都是一样的。
(2)记录所有的移动步数总和sum。
(3)如果 sum正好等于target正好返回。
(4)如果sum比目标 target大,那么计算 sum与 target的差值是奇数还是偶数。因为可以向左或者向右移动,如果是奇数的话,右移左移无法回到 target,但是偶数可以。
(5)如果 sum-target为奇数,那么再移动奇数步可以正好得到偶数步。
代码:
Class Solution{
public int reachNumber(int target){
int posTarget = Math.abs(target);
int sum = 0;
int steps = 0;
while(sum < posTarget){
steps++;
sum += steps;
if(sum == posTarget) return steps;
if(sum > posTarget){
int dif = sum - posTarget;
if(dif % 2 == 0) return steps;
steps++;
if(steps % 2 != 0) return steps;
else return ++steps;
}
}
return steps;
}
}