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;
}
}