LeetCode 整数替换

题目传送
在这里插入图片描述
其实可以dp的,只是数据太大了。

dfs也可,偶数直接除2的代价肯定要比一个一个减或者加的代价小,所以是偶数直接除。如果是奇数,就dfs一下,取最小值。因为减一下或者加一下又必定是偶数。偶数又是除2,假设全程除下来,也就最多除32次。那么这个中间加上减的次数,时间复杂度绝对不会多。

还可以直接贪心,要分很多情况了
还有就是记忆化搜索
这里就放个最简单的了

class Solution {
    
    
public:
    int integerReplacement(int n) {
    
    
        if(n == 1){
    
    
            return 0;
        }
        if(n%2 == 0){
    
    
            return 1 + integerReplacement(n/2);
        }
        else{
    
    
            return 2 + min(integerReplacement(n/2+1),integerReplacement(n/2));
        }
    }
};

猜你喜欢

转载自blog.csdn.net/moasad/article/details/121433697