问题分析
典型的遍历解集树问题,但是题目中存在一个特殊数据,他第一次输入的n == INT32_MAX
,这将会导致对于n + 1
的情况发生溢出问题,所以我们必须指定递归函数的参数为unsigned int
。
完整代码
class Solution {
public:
int integerReplacement(int n) {
return traverse(static_cast<unsigned int>(n));
}
int traverse(unsigned int n){
if(n == 1)
return 0;
if(n % 2 == 0)
return traverse(n / 2) + 1;
else
return min(traverse(n + 1), traverse(n - 1)) + 1;
}
};