Skip to content

Commit 261c1a6

Browse files
authored
Create integer-replacement.cpp
1 parent d2d03d3 commit 261c1a6

1 file changed

Lines changed: 55 additions & 0 deletions

File tree

‎C++/integer-replacement.cpp‎

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
// Time: O(logn)
2+
// Space: O(1)
3+
4+
// Iterative solution.
5+
class Solution {
6+
public:
7+
int integerReplacement(int n) {
8+
if (n == 2147483647) {
9+
return 2 + integerReplacement(n / 2 + 1);
10+
}
11+
12+
int result = 0;
13+
while (n != 1) {
14+
const auto b = n & 3;
15+
if (n == 3) {
16+
--n;
17+
} else if (b == 3) {
18+
++n;
19+
} else if (b == 1) {
20+
--n;
21+
} else {
22+
n /= 2;
23+
}
24+
++result;
25+
}
26+
return result;
27+
}
28+
};
29+
30+
// Time: O(logn)
31+
// Space: O(logn)
32+
// Recursive solution
33+
class Solution2 {
34+
public:
35+
int integerReplacement(int n) {
36+
if (n == 2147483647) {
37+
return 2 + integerReplacement(n / 2 + 1);
38+
}
39+
40+
if (n < 4) {
41+
switch (n % 4) {
42+
case 0: case 1: return 0;
43+
case 2: return 1;
44+
case 3: return 2;
45+
}
46+
}
47+
48+
switch (n % 4) {
49+
case 0: case 2: return integerReplacement(n / 2) + 1;
50+
case 1: return integerReplacement((n - 1) / 4) + 3;
51+
case 3: return integerReplacement((n + 1) / 4) + 3;
52+
}
53+
return 0;
54+
}
55+
};

0 commit comments

Comments
 (0)