File tree Expand file tree Collapse file tree 4 files changed +81
-9
lines changed
solution/1600-1699/1611.Minimum One Bit Operations to Make Integers Zero Expand file tree Collapse file tree 4 files changed +81
-9
lines changed Original file line number Diff line number Diff line change 51
51
52
52
<!-- 这里可写通用的实现逻辑 -->
53
53
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
+
54
64
<!-- tabs:start -->
55
65
56
66
### ** Python3**
57
67
58
68
<!-- 这里可写当前语言的特殊实现逻辑 -->
59
69
60
70
``` 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)
62
80
```
63
81
64
- ### ** Java **
82
+ ### ** Go **
65
83
66
84
<!-- 这里可写当前语言的特殊实现逻辑 -->
67
85
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
+ }
70
100
```
71
101
72
102
### ** ...**
Original file line number Diff line number Diff line change 50
50
### ** Python3**
51
51
52
52
``` 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)
54
62
```
55
63
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
+ }
60
80
```
61
81
62
82
### ** ...**
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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 )
You can’t perform that action at this time.
0 commit comments