Skip to content

Commit 385b906

Browse files
authored
feat: add solutions to lc problem: No.1611 (doocs#859)
1 parent 662e898 commit 385b906

File tree

4 files changed

+81
-9
lines changed

4 files changed

+81
-9
lines changed

solution/1600-1699/1611.Minimum One Bit Operations to Make Integers Zero/README.md

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,22 +51,52 @@
5151

5252
<!-- 这里可写通用的实现逻辑 -->
5353

54+
**方法一:递归**
55+
56+
通过找规律可以发现动态规划转移方程如下:
57+
58+
$$
59+
dp[n] = dp[2^k] - dp[n - 2^k]
60+
$$
61+
62+
其中 $dp[2^k] = 2^{k+1}-1$,而 $k$ 表示小于等于 $n$ 的最大的 $2$ 的整数次幂的位数,即 $2^k$ 是小于等于 $n$ 的最大的 $2$ 的整数次幂。
63+
5464
<!-- tabs:start -->
5565

5666
### **Python3**
5767

5868
<!-- 这里可写当前语言的特殊实现逻辑 -->
5969

6070
```python
61-
71+
class Solution:
72+
def minimumOneBitOperations(self, n: int) -> int:
73+
if n <= 1:
74+
return n
75+
for i in range(64):
76+
if (n >> i) == 1:
77+
base = 1 << i
78+
break
79+
return 2*base-1 - self.minimumOneBitOperations(n-base)
6280
```
6381

64-
### **Java**
82+
### **Go**
6583

6684
<!-- 这里可写当前语言的特殊实现逻辑 -->
6785

68-
```java
69-
86+
```go
87+
func minimumOneBitOperations(n int) int {
88+
if n <= 1 {
89+
return n
90+
}
91+
base := 0
92+
for i := 0; i < 64; i++ {
93+
if (n >> i) == 1 {
94+
base = 1 << i
95+
break
96+
}
97+
}
98+
return (base << 1) - 1 - minimumOneBitOperations(n-base)
99+
}
70100
```
71101

72102
### **...**

solution/1600-1699/1611.Minimum One Bit Operations to Make Integers Zero/README_EN.md

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,33 @@
5050
### **Python3**
5151

5252
```python
53-
53+
class Solution:
54+
def minimumOneBitOperations(self, n: int) -> int:
55+
if n <= 1:
56+
return n
57+
for i in range(64):
58+
if (n >> i) == 1:
59+
base = 1 << i
60+
break
61+
return 2*base-1 - self.minimumOneBitOperations(n-base)
5462
```
5563

56-
### **Java**
57-
58-
```java
59-
64+
### **Go**
65+
66+
```go
67+
func minimumOneBitOperations(n int) int {
68+
if n <= 1 {
69+
return n
70+
}
71+
base := 0
72+
for i := 0; i < 64; i++ {
73+
if (n >> i) == 1 {
74+
base = 1 << i
75+
break
76+
}
77+
}
78+
return (base << 1) - 1 - minimumOneBitOperations(n-base)
79+
}
6080
```
6181

6282
### **...**
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
func minimumOneBitOperations(n int) int {
2+
if n <= 1 {
3+
return n
4+
}
5+
base := 0
6+
for i := 0; i < 64; i++ {
7+
if (n >> i) == 1 {
8+
base = 1 << i
9+
break
10+
}
11+
}
12+
return (base << 1) - 1 - minimumOneBitOperations(n-base)
13+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class Solution:
2+
def minimumOneBitOperations(self, n: int) -> int:
3+
if n <= 1:
4+
return n
5+
for i in range(64):
6+
if (n >> i) == 1:
7+
base = 1 << i
8+
break
9+
return 2*base-1 - self.minimumOneBitOperations(n-base)

0 commit comments

Comments
 (0)