Skip to content

Commit c4f57fb

Browse files
committed
feat: add solutions to lc problem: No.1017
No.1017.Convert to Base -2
1 parent c3b51eb commit c4f57fb

File tree

6 files changed

+249
-10
lines changed

6 files changed

+249
-10
lines changed

solution/1000-1099/1017.Convert to Base -2/README.md

Lines changed: 93 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,22 +48,114 @@
4848

4949
<!-- 这里可写通用的实现逻辑 -->
5050

51+
**方法一:模拟**
52+
53+
我们可以判断 $n$ 从低位到高位的每一位,如果该位为 $1$,那么答案的该位为 $1$,否则为 $0$。如果该位为 $1$,那么我们需要将 $n$ 减去 $k$。接下来我们更新 $n = \lfloor n / 2 \rfloor$, $k = -k$。继续判断下一位。
54+
55+
最后,我们将答案反转后返回即可。
56+
57+
时间复杂度 $O(\log n)$,其中 $n$ 为给定的整数。忽略答案的空间消耗,空间复杂度 $O(1)$。
58+
5159
<!-- tabs:start -->
5260

5361
### **Python3**
5462

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

5765
```python
58-
66+
class Solution:
67+
def baseNeg2(self, n: int) -> str:
68+
k = 1
69+
ans = []
70+
while n:
71+
if n % 2:
72+
ans.append('1')
73+
n -= k
74+
else:
75+
ans.append('0')
76+
n //= 2
77+
k *= -1
78+
return ''.join(ans[::-1]) or '0'
5979
```
6080

6181
### **Java**
6282

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

6585
```java
86+
class Solution {
87+
public String baseNeg2(int n) {
88+
if (n == 0) {
89+
return "0";
90+
}
91+
int k = 1;
92+
StringBuilder ans = new StringBuilder();
93+
while (n != 0) {
94+
if (n % 2 != 0) {
95+
ans.append(1);
96+
n -= k;
97+
} else {
98+
ans.append(0);
99+
}
100+
k *= -1;
101+
n /= 2;
102+
}
103+
return ans.reverse().toString();
104+
}
105+
}
106+
```
107+
108+
### **C++**
109+
110+
```cpp
111+
class Solution {
112+
public:
113+
string baseNeg2(int n) {
114+
if (n == 0) {
115+
return "0";
116+
}
117+
int k = 1;
118+
string ans;
119+
while (n) {
120+
if (n % 2) {
121+
ans.push_back('1');
122+
n -= k;
123+
} else {
124+
ans.push_back('0');
125+
}
126+
k *= -1;
127+
n /= 2;
128+
}
129+
reverse(ans.begin(), ans.end());
130+
return ans;
131+
}
132+
};
133+
```
66134
135+
### **Go**
136+
137+
```go
138+
func baseNeg2(n int) string {
139+
if n == 0 {
140+
return "0"
141+
}
142+
ans := []byte{}
143+
k := 1
144+
for n != 0 {
145+
if n%2 != 0 {
146+
ans = append(ans, '1')
147+
n -= k
148+
} else {
149+
ans = append(ans, '0')
150+
}
151+
k *= -1
152+
n /= 2
153+
}
154+
for i, j := 0, len(ans)-1; i < j; i, j = i+1, j-1 {
155+
ans[i], ans[j] = ans[j], ans[i]
156+
}
157+
return string(ans)
158+
}
67159
```
68160

69161
### **...**

solution/1000-1099/1017.Convert to Base -2/README_EN.md

Lines changed: 85 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,97 @@
4747
### **Python3**
4848

4949
```python
50-
50+
class Solution:
51+
def baseNeg2(self, n: int) -> str:
52+
k = 1
53+
ans = []
54+
while n:
55+
if n % 2:
56+
ans.append('1')
57+
n -= k
58+
else:
59+
ans.append('0')
60+
n //= 2
61+
k *= -1
62+
return ''.join(ans[::-1]) or '0'
5163
```
5264

5365
### **Java**
5466

5567
```java
68+
class Solution {
69+
public String baseNeg2(int n) {
70+
if (n == 0) {
71+
return "0";
72+
}
73+
int k = 1;
74+
StringBuilder ans = new StringBuilder();
75+
while (n != 0) {
76+
if (n % 2 != 0) {
77+
ans.append(1);
78+
n -= k;
79+
} else {
80+
ans.append(0);
81+
}
82+
k *= -1;
83+
n /= 2;
84+
}
85+
return ans.reverse().toString();
86+
}
87+
}
88+
```
89+
90+
### **C++**
91+
92+
```cpp
93+
class Solution {
94+
public:
95+
string baseNeg2(int n) {
96+
if (n == 0) {
97+
return "0";
98+
}
99+
int k = 1;
100+
string ans;
101+
while (n) {
102+
if (n % 2) {
103+
ans.push_back('1');
104+
n -= k;
105+
} else {
106+
ans.push_back('0');
107+
}
108+
k *= -1;
109+
n /= 2;
110+
}
111+
reverse(ans.begin(), ans.end());
112+
return ans;
113+
}
114+
};
115+
```
56116
117+
### **Go**
118+
119+
```go
120+
func baseNeg2(n int) string {
121+
if n == 0 {
122+
return "0"
123+
}
124+
ans := []byte{}
125+
k := 1
126+
for n != 0 {
127+
if n%2 != 0 {
128+
ans = append(ans, '1')
129+
n -= k
130+
} else {
131+
ans = append(ans, '0')
132+
}
133+
k *= -1
134+
n /= 2
135+
}
136+
for i, j := 0, len(ans)-1; i < j; i, j = i+1, j-1 {
137+
ans[i], ans[j] = ans[j], ans[i]
138+
}
139+
return string(ans)
140+
}
57141
```
58142

59143
### **...**
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public:
3+
string baseNeg2(int n) {
4+
if (n == 0) {
5+
return "0";
6+
}
7+
int k = 1;
8+
string ans;
9+
while (n) {
10+
if (n % 2) {
11+
ans.push_back('1');
12+
n -= k;
13+
} else {
14+
ans.push_back('0');
15+
}
16+
k *= -1;
17+
n /= 2;
18+
}
19+
reverse(ans.begin(), ans.end());
20+
return ans;
21+
}
22+
};
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
func baseNeg2(n int) string {
2+
if n == 0 {
3+
return "0"
4+
}
5+
ans := []byte{}
6+
k := 1
7+
for n != 0 {
8+
if n%2 != 0 {
9+
ans = append(ans, '1')
10+
n -= k
11+
} else {
12+
ans = append(ans, '0')
13+
}
14+
k *= -1
15+
n /= 2
16+
}
17+
for i, j := 0, len(ans)-1; i < j; i, j = i+1, j-1 {
18+
ans[i], ans[j] = ans[j], ans[i]
19+
}
20+
return string(ans)
21+
}
Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
class Solution {
2-
public String baseNeg2(int N) {
3-
if (N == 0) {
2+
public String baseNeg2(int n) {
3+
if (n == 0) {
44
return "0";
55
}
6-
StringBuilder sb = new StringBuilder();
7-
while (N != 0) {
8-
sb.append(N & 1);
9-
N = -(N >> 1);
6+
int k = 1;
7+
StringBuilder ans = new StringBuilder();
8+
while (n != 0) {
9+
if (n % 2 != 0) {
10+
ans.append(1);
11+
n -= k;
12+
} else {
13+
ans.append(0);
14+
}
15+
k *= -1;
16+
n /= 2;
1017
}
11-
return sb.reverse().toString();
18+
return ans.reverse().toString();
1219
}
13-
}
20+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def baseNeg2(self, n: int) -> str:
3+
k = 1
4+
ans = []
5+
while n:
6+
if n % 2:
7+
ans.append('1')
8+
n -= k
9+
else:
10+
ans.append('0')
11+
n //= 2
12+
k *= -1
13+
return ''.join(ans[::-1]) or '0'

0 commit comments

Comments
 (0)