题目地址:
https://leetcode.com/problems/integer-replacement/description/
给定一个 32 32 32位正整数 n n n,如果 n n n是偶数,可以将其除以 2 2 2;如果其是奇数,可以将其加 1 1 1或者减 1 1 1。问多少步能变为 1 1 1。
可以直接用递归。代码如下:
class Solution {
public:
int integerReplacement(int n) {
if (n == 1) return 0;
if (n % 2 == 0) return 1 + integerReplacement(n / 2);
if (n == INT_MAX) return 32;
return 1 + min(integerReplacement(n - 1), integerReplacement(n + 1));
}
};
时空复杂度由具体数据决定。