今日中等題:https://leetcode.cn/problems/reach-a-number/
今天題目其實(shí)是數(shù)學(xué)題,求移動(dòng)次數(shù)兰粉,其實(shí)是求離target近可能近的情況下芭挽,還要左右移動(dòng)幾次工扎。
因?yàn)閠arget無(wú)論正負(fù),從0出發(fā)都是對(duì)稱的舞骆,所以直接用Math.abs方法取模。
然后通過(guò)循環(huán)累加到離target最近的情況,這個(gè)時(shí)候引用題解的圖更直觀:
貼下我的答案:
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有負(fù)數(shù)情況缸逃,為了統(tǒng)一計(jì)算邏輯,所以取絕對(duì)值
// 直到num值大于等于t厂抽,并且num減t是偶數(shù)需频,才結(jié)束while循環(huán)
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/
# 來(lái)源:力扣(LeetCode)
# 著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)筷凤,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處昭殉。