754. 到達終點數字

數學規律

難度:中等
推薦學習視頻:花花醬

class Solution {
public:
    int reachNumber(int target) {
        // t = k*(k+1)/2 => k = sqrt(2*t) 2020.2.27 數學規律 
        //優先找到平方根附近的數 然後計算目標值與實際值的差值d 如果d是偶數 
        //說明不需要只需要在走的過程中來了沒必要的折返d/2 就抵消了這個距離d
        //如果是奇數 說明至少還需要多走一步 如果是結束的step是偶數 那麼下一次step+1爲奇數就能湊出一個偶數來形成折返 如果step是奇數 說明還需再多走一步 step+1是偶數 step+2是奇數
            target = abs(target);
            int k = sqrt(target*2);
            while(sum(k) < target) k++;
            int d = sum(k)  - target;
            if(d%2 == 0) return k;
            return k+1+(k%2);
            
    }
private:
    int sum(int n){
        return n*(n+1)/2;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章