Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 385b906

Browse files
authored
feat: add solutions to lc problem: No.1611 (#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)

AltStyle によって変換されたページ (->オリジナル) /