题目传送
其实可以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));
}
}
};