int integerReplacement(long n, int d = 0) { return n == 1 ? d : n % 2 == 0 ? integerReplacement(n / 2, d + 1) : min(integerReplacement(n + 1, d + 1), integerReplacement(n - 1, d + 1)); }
int integerReplacement(int n) { if (n == 2147483647) return 32; if (n == 1) return 0; if (n % 2 == 0) return 1 + integerReplacement(n >> 1);//even int plusOne = 1 + integerReplacement(n + 1); int minusOne = 1 + integerReplacement(n - 1); return plusOne < minusOne ? plusOne : minusOne; }
int integerReplacement(int n) { if(n==INT_MAX) return 32; if(n==1) return 0; if(n%2==0) return 1 + integerReplacement(n/2); else return 1 + min(integerReplacement(n-1),integerReplacement(n+1)); }
int integerReplacement(long n) { if (n == 1) return 0; if (n % 2 == 0) { return 1 + integerReplacement(n / 2); } else { int a = integerReplacement(n + 1); int b = integerReplacement(n - 1); return 1 + min(a, b); } }
int integerReplacement(int n) { if(n == 1 || 0) return 0; if(n == 2) return 1; if(n % 2 == 0) return integerReplacement(n / 2) + 1; else{ if(n == INT_MAX) return min(integerReplacement(n - 1), integerReplacement(n / 2 + 1) + 1) + 1; return min(integerReplacement(n - 1), integerReplacement(n + 1)) + 1; } }
int integerReplacement_recursionWithCache(int n) { static unordered_map<int, int> cache; //if hitted the cache, just return the result if (cache.find(n) != cache.end()) return cache[n]; int result; if ( n <= 1) return 0; // recursive exited point if ( n == INT_MAX ) return 32; // special case to avoid integer overflow. if ( n % 2 == 0 ) result = integerReplacement(n/2) + 1; else result = min( integerReplacement(n+1), integerReplacement(n-1) ) + 1; //add into cache cache[n] = result; return result; }
int integerReplacement(int n) { if (n == 1) return res; if (n == 3) { res += 2; return res; } if (n == INT_MAX) return 32; res ++; if (n & 1) if ((n + 1) % 4 == 0) integerReplacement(n + 1); else integerReplacement(n - 1); else integerReplacement(n / 2); return res; }
int integerReplacement_recursion(int n) { if ( n <= 1) return 0; // recursive exited point if ( n == INT_MAX ) return 32; // special case to avoid integer overflow. if ( n % 2 == 0 ) return integerReplacement(n/2) + 1; return min( integerReplacement(n+1), integerReplacement(n-1) ) + 1; }
int integerReplacement(int n) { if (n == 1) return 0; if (n % 2 == 0) return integerReplacement(n / 2) + 1; if (n != INT_MAX) return min(integerReplacement(n + 1), integerReplacement(n - 1)) + 1; return min(integerReplacement(n - 1), integerReplacement(((n - 1) / 2 + 1) + 1)) + 1; }