leetcode 754 到達終點數字

2021-09-01 23:39:30 字數 1507 閱讀 5469

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

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

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

示例 1:

輸入: target = 3

輸出: 2

解釋:第一次移動,從 0 到 1 。

第二次移動,從 1 到 3 。

示例 2:

輸入: target = 2

輸出: 3

解釋:第一次移動,從 0 到 1 。

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

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

注意:

這題我一開始的想法是用二叉樹儲存每一次的的結果,但是在思考之後發現完全不可行!太複雜了,於是借鑑了他人的思想。

因為數軸具有對稱性,因此target的正負與最後的結果無關,因此輸入的target都可以轉化成正值。

在極端情況下,如果一直往右走那麼最後走最後的長度是sum = n * (n + 1) /  2,target一定小於或等於這個值。

用反證法可得n < (sum - target) / 2

當(sum - target) % 2 == 0時

一定可以在1到n中找到乙個數等於(sum - target) / 2

(1 + 2 + 3 + ... + n) - (1 + 2 + 3 + ... - (sum - target) / 2 + ... + n) = sum - target

1 + 2 + 3 + ... - (sum - target) / 2 + ... + n  = sum - (sum - target) = target

即移動次數為n

當(sum - target) % 2 != 0時

若n為偶數

則有(1 + 2 + 3 + ... - (sum - target + 1) / 2 + ... - n / 2 ...+ ... + n + 1) = sum + n + 1 - (sum - target + 1) - n = target

即移動次數為n + 1

若n為奇數

則有(1 + 2 + 3 + ... - (sum - target + 1) / 2 + ... + ... - (n + 1) + n + 2) =sum - (n + 1) - (sum - target + 1) + n + 2 = target

即移動次數為n + 2

class solution    

int i = 0;

while(i * (i + 1 ) / 2 < target)

if(i * (i + 1 ) / 2 == target)

else

else

else}}

}

LeetCode754 到達終點數字

在一根無限長的數軸上,你站在0的位置。終點在target的位置。每次你可以選擇向左或向右移動。第 n 次移動 從 1 開始 可以走 n 步。返回到達終點需要的最小移動次數。示例 1 輸入 target 3 輸出 2 解釋 第一次移動,從 0 到 1 第二次移動,從 1 到 3 示例 2 輸入 tar...

leetcode 754 到達終點數字

題目 在一根無限長的數軸上,你站在0的位置。終點在target的位置。每次你可以選擇向左或向右移動。第 n 次移動 從 1 開始 可以走 n 步。返回到達終點需要的最小移動次數 class solution return i 1 target的正負與答案無關,故取正,假設前n步均向右走,如果恰好得到...

Leetcode 754 到達終點數字 C

在一根無限長的數軸上,你站在0的位置。終點在target的位置。每次你可以選擇向左或向右移動。第 n 次移動 從 1 開始 可以走 n 步。返回到達終點需要的最小移動次數。示例 1 輸入 target 3 輸出 2 解釋 第一次移動,從 0 到 1 第二次移動,從 1 到 3 示例 2 輸入 tar...