今日中等题:https://leetcode.cn/problems/reach-a-number/
今天题目其实是数学题,求移动次数,其实是求离target近可能近的情况下,还要左右移动几次。
因为target无论正负,从0出发都是对称的,所以直接用Math.abs方法取模。
然后通过循环累加到离target最近的情况,这个时候引用题解的图更直观:
贴下我的答案:
class Solution {
public int reachNumber(int target) {
int abst = Math.abs(target);
int sum = 0;
int start = 0;
while (sum < abst) {
start++;
sum += start;
}
int mid = sum - abst;
if (mid % 2 == 0) {
return start;
}
if (start % 2 == 0) {
return start + 1;
}
else {
return start +2;
}
}
}
再贴下大佬的答案:
class Solution {
public int reachNumber(int target) {
int result = 0, num = 0, t = Math.abs(target); // 由于target有负数情况,为了统一计算逻辑,所以取绝对值
// 直到num值大于等于t,并且num减t是偶数,才结束while循环
while (num < t || (num - t) % 2 != 0)
num += ++result; // num=1+2+3+4+……
return result;
}
}
# 作者:muse-77
# 链接:https://leetcode.cn/problems/reach-a-number/solution/by-muse-77-g0il/
# 来源:力扣(LeetCode)
# 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。