1. 程式人生 > >leetcode+最少步數到達1,遞迴

leetcode+最少步數到達1,遞迴

點選開啟連結
//分奇偶函式遞迴
class Solution {
public:
    int integerReplacement(int n) {
        if(n==1) return 0;
        if(n==INT_MAX) return 32;
        int r=0, rr=0;
        int k = n&1; //取整數的最後一位,判斷奇偶性。
        if(!k){ //偶函式
            r = integerReplacement(n>>1)+1;//遞迴,左移一位,+1
        }
        else{//奇數
            r = integerReplacement(n>>1)+2;//減1。末尾直接忽略
            rr = integerReplacement((n+1)>>1)+2; //考慮 n=INT_MAX。 所以前面提出INT_MAX,防止+1溢位
            r = min(r, rr);
        }
        return r;
    }
};