class Solution {
public:
int reachNumber(int target) {
}
};
754. 到达终点数字
在一根无限长的数轴上,你站在0
的位置。终点在target
的位置。
你可以做一些数量的移动 numMoves
:
i
次移动(从 i == 1
开始,到 i == numMoves
),在选择的方向上走 i
步。给定整数 target
,返回 到达目标所需的 最小 移动次数(即最小 numMoves
) 。
示例 1:
输入: target = 2 输出: 3 解释: 第一次移动,从 0 到 1 。 第二次移动,从 1 到 -1 。 第三次移动,从 -1 到 2 。
示例 2:
输入: target = 3 输出: 2 解释: 第一次移动,从 0 到 1 。 第二次移动,从 1 到 3 。
提示:
-109 <= target <= 109
target != 0
原站题解
golang 解法, 执行用时: 4 ms, 内存消耗: 1.8 MB, 提交时间: 2022-11-24 10:04:23
func reachNumber(target int) int { if target < 0 { target = -target } k := 0 for target > 0 { k++ target -= k } if target%2 == 0 { return k } return k + 1 + k%2 }
python3 解法, 执行用时: 108 ms, 内存消耗: 14.9 MB, 提交时间: 2022-11-24 10:04:10
''' 转化为 1, 2 ... k, k个数之间通过+/-连接,结果等于target的情况 ''' class Solution: def reachNumber(self, target: int) -> int: target = abs(target) k = 0 while target > 0: k += 1 target -= k return k if target % 2 == 0 else k + 1 + k % 2