用了最常规的DP算法,==,内存不够啦。
class Solution {
public:
int integerReplacement(int n) {
vector<int> dp(n+1,0);
dp[1]=0;
for(int i=2;i<=n;i++)
{
if(i%2==0)
dp[i]=1+dp[i/2];
else
dp[i]=2+min(dp[i/2],dp[i/2+1]);
}
return dp[n];
}
};
看了discuss,但是还是不大懂,只能理解他是怎么做的。一种greedy的策略。
class Solution {
public:
int integerReplacement(int n) {
if(n==INT_MAX)
return 32;
int count=0;
while(n!=1)
{
if(n%2==0)
n=n/2;
else if(n==3)
n--;
else if((n+1)%4==0)
n++;
else
n--;
count++;
}
return count;
}
};