天天看點

Java實作 LeetCode 754 到達終點數字(暴力+反向)

754. 到達終點數字

在一根無限長的數軸上,你站在0的位置。終點在target的位置。

每次你可以選擇向左或向右移動。第 n 次移動(從 1 開始),可以走 n 步。

傳回到達終點需要的最小移動次數。

示例 1:

輸入: target = 3

輸出: 2

解釋:

第一次移動,從 0 到 1 。

第二次移動,從 1 到 3 。

示例 2:

輸入: target = 2

輸出: 3

解釋:

第一次移動,從 0 到 1 。

第二次移動,從 1 到 -1 。

第三次移動,從 -1 到 2 。

注意:

target是在[-10^9, 10^9]範圍中的非零整數。

class Solution {
      public int reachNumber(int target) {
        int sum = 0;
        int c = 0;
        target = Math.abs(target);
        //必須要走的數量小于目标數量才能循環
        //并且走的數量減去目标數量,是偶數,可以翻轉做到
                //舉例子
        //假如是差偶數步,可以左走1右走2右走3右走4就到了8
        //              如果是正常的話就是1+2+3+4=10
        while(sum < target || (sum-target)%2!=0){
            c ++;
            sum += c;
        }
        return c;
    }
}