Skip to content

Commit 8d1bcf1

Browse files
committed
feat: update solutions to lc problem: No.0006
No.0006.ZigZag Conversion
1 parent cf4a493 commit 8d1bcf1

File tree

6 files changed

+148
-220
lines changed

6 files changed

+148
-220
lines changed

solution/0000-0099/0006.ZigZag Conversion/README.md

Lines changed: 49 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -72,33 +72,21 @@ P I
7272

7373
```python
7474
class Solution:
75-
def convert(self, s, numRows):
76-
"""
77-
:type s: str
78-
:type numRows: int
79-
:rtype: str
80-
"""
81-
82-
if numRows == 0:
83-
return ""
84-
elif numRows == 1:
75+
def convert(self, s: str, numRows: int) -> str:
76+
if numRows == 1:
8577
return s
86-
87-
Ret = [[] for i in range(numRows)]
88-
i = 0
89-
while i < len(s):
90-
j = 0
91-
while i < len(s) and j < numRows: # Vertical lines
92-
Ret[j].append(s[i])
93-
i += 1
94-
j += 1
95-
j -= 2
96-
while i < len(s) and j > 0: # Diagonal lines
97-
Ret[j].append(s[i])
98-
j -= 1
99-
i += 1
100-
101-
return "".join(["".join(row) for row in Ret])
78+
group = 2 * numRows - 2
79+
ans = []
80+
for i in range(1, numRows + 1):
81+
interval = group if i == numRows else 2 * numRows - 2 * i
82+
idx = i - 1
83+
while idx < len(s):
84+
ans.append(s[idx])
85+
idx += interval
86+
interval = group - interval
87+
if interval == 0:
88+
interval = group
89+
return ''.join(ans)
10290
```
10391

10492
### **Java**
@@ -108,62 +96,50 @@ class Solution:
10896
```java
10997
class Solution {
11098
public String convert(String s, int numRows) {
111-
if (numRows == 1) return s;
112-
StringBuilder result = new StringBuilder();
99+
if (numRows == 1) {
100+
return s;
101+
}
102+
StringBuilder ans = new StringBuilder();
113103
int group = 2 * numRows - 2;
114104
for (int i = 1; i <= numRows; i++) {
115-
int interval = 2 * numRows - 2 * i;
116-
if (i == numRows) interval = 2 * numRows - 2;
117-
int index = i;
118-
while (index <= s.length()) {
119-
result.append(s.charAt(index - 1));
120-
index += interval;
105+
int interval = i == numRows ? group : 2 * numRows - 2 * i;
106+
int idx = i - 1;
107+
while (idx < s.length()) {
108+
ans.append(s.charAt(idx));
109+
idx += interval;
121110
interval = group - interval;
122-
if (interval == 0) interval = group;
111+
if (interval == 0) {
112+
interval = group;
113+
}
123114
}
124115
}
125-
return result.toString();
116+
return ans.toString();
126117
}
127118
}
128119
```
129120

130121
### **C++**
131122

132123
```cpp
133-
// @ID:6. ZigZag Conversion
134-
// @author:jxdeng3989
135-
136124
class Solution {
137125
public:
138126
string convert(string s, int numRows) {
139-
string retstr;
140-
if(1==numRows)
141-
return s;
142-
for(int i=0; i<numRows; ++i)
127+
if (numRows == 1) return s;
128+
string ans;
129+
int group = 2 * numRows - 2;
130+
for (int i = 1; i <= numRows; ++i)
143131
{
144-
retstr.push_back(s[i]);
145-
int maxspan = 2*(numRows-1);
146-
int span1 = maxspan-i*2;
147-
int span2 = maxspan - span1;
148-
int cntpos = i;
149-
if(span1==0)
150-
span1 = span2;
151-
if(span2==0)
152-
span2 = span1;
153-
while(1)
154-
{
155-
if(cntpos+span1>=s.size())
156-
break;
157-
cntpos += span1;
158-
retstr.push_back(s[cntpos]);
159-
160-
if(cntpos+span2>=s.size())
161-
break;
162-
cntpos += span2;
163-
retstr.push_back(s[cntpos]);
164-
}
132+
int interval = i == numRows ? group : 2 * numRows - 2 * i;
133+
int idx = i - 1;
134+
while (idx < s.length())
135+
{
136+
ans.push_back(s[idx]);
137+
idx += interval;
138+
interval = group - interval;
139+
if (interval == 0) interval = group;
140+
}
165141
}
166-
return retstr;
142+
return ans;
167143
}
168144
};
169145
```
@@ -209,21 +185,21 @@ func convert(s string, numRows int) string {
209185
if numRows == 1 {
210186
return s
211187
}
212-
length := len(s)
213-
result := make([]byte, length)
214-
step := 2 * numRows - 2
188+
n := len(s)
189+
ans := make([]byte, n)
190+
step := 2*numRows - 2
215191
count := 0
216192
for i := 0; i < numRows; i++ {
217-
for j := 0; j + i < length; j += step {
218-
result[count] = s[i+j]
193+
for j := 0; j+i < n; j += step {
194+
ans[count] = s[i+j]
219195
count++
220-
if i != 0 && i != numRows - 1 && j + step - i < length {
221-
result[count] = s[j+step-i]
196+
if i != 0 && i != numRows-1 && j+step-i < n {
197+
ans[count] = s[j+step-i]
222198
count++
223199
}
224200
}
225201
}
226-
return string(result)
202+
return string(ans)
227203
}
228204
```
229205

solution/0000-0099/0006.ZigZag Conversion/README_EN.md

Lines changed: 49 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -66,33 +66,21 @@ P I
6666

6767
```python
6868
class Solution:
69-
def convert(self, s, numRows):
70-
"""
71-
:type s: str
72-
:type numRows: int
73-
:rtype: str
74-
"""
75-
76-
if numRows == 0:
77-
return ""
78-
elif numRows == 1:
69+
def convert(self, s: str, numRows: int) -> str:
70+
if numRows == 1:
7971
return s
80-
81-
Ret = [[] for i in range(numRows)]
82-
i = 0
83-
while i < len(s):
84-
j = 0
85-
while i < len(s) and j < numRows: # Vertical lines
86-
Ret[j].append(s[i])
87-
i += 1
88-
j += 1
89-
j -= 2
90-
while i < len(s) and j > 0: # Diagonal lines
91-
Ret[j].append(s[i])
92-
j -= 1
93-
i += 1
94-
95-
return "".join(["".join(row) for row in Ret])
72+
group = 2 * numRows - 2
73+
ans = []
74+
for i in range(1, numRows + 1):
75+
interval = group if i == numRows else 2 * numRows - 2 * i
76+
idx = i - 1
77+
while idx < len(s):
78+
ans.append(s[idx])
79+
idx += interval
80+
interval = group - interval
81+
if interval == 0:
82+
interval = group
83+
return ''.join(ans)
9684
```
9785

9886
### **Java**
@@ -102,62 +90,50 @@ class Solution:
10290
```java
10391
class Solution {
10492
public String convert(String s, int numRows) {
105-
if (numRows == 1) return s;
106-
StringBuilder result = new StringBuilder();
93+
if (numRows == 1) {
94+
return s;
95+
}
96+
StringBuilder ans = new StringBuilder();
10797
int group = 2 * numRows - 2;
10898
for (int i = 1; i <= numRows; i++) {
109-
int interval = 2 * numRows - 2 * i;
110-
if (i == numRows) interval = 2 * numRows - 2;
111-
int index = i;
112-
while (index <= s.length()) {
113-
result.append(s.charAt(index - 1));
114-
index += interval;
99+
int interval = i == numRows ? group : 2 * numRows - 2 * i;
100+
int idx = i - 1;
101+
while (idx < s.length()) {
102+
ans.append(s.charAt(idx));
103+
idx += interval;
115104
interval = group - interval;
116-
if (interval == 0) interval = group;
105+
if (interval == 0) {
106+
interval = group;
107+
}
117108
}
118109
}
119-
return result.toString();
110+
return ans.toString();
120111
}
121112
}
122113
```
123114

124115
### **C++**
125116

126117
```cpp
127-
// @ID:6. ZigZag Conversion
128-
// @author:jxdeng3989
129-
130118
class Solution {
131119
public:
132120
string convert(string s, int numRows) {
133-
string retstr;
134-
if(1==numRows)
135-
return s;
136-
for(int i=0; i<numRows; ++i)
121+
if (numRows == 1) return s;
122+
string ans;
123+
int group = 2 * numRows - 2;
124+
for (int i = 1; i <= numRows; ++i)
137125
{
138-
retstr.push_back(s[i]);
139-
int maxspan = 2*(numRows-1);
140-
int span1 = maxspan-i*2;
141-
int span2 = maxspan - span1;
142-
int cntpos = i;
143-
if(span1==0)
144-
span1 = span2;
145-
if(span2==0)
146-
span2 = span1;
147-
while(1)
148-
{
149-
if(cntpos+span1>=s.size())
150-
break;
151-
cntpos += span1;
152-
retstr.push_back(s[cntpos]);
153-
154-
if(cntpos+span2>=s.size())
155-
break;
156-
cntpos += span2;
157-
retstr.push_back(s[cntpos]);
158-
}
126+
int interval = i == numRows ? group : 2 * numRows - 2 * i;
127+
int idx = i - 1;
128+
while (idx < s.length())
129+
{
130+
ans.push_back(s[idx]);
131+
idx += interval;
132+
interval = group - interval;
133+
if (interval == 0) interval = group;
134+
}
159135
}
160-
return retstr;
136+
return ans;
161137
}
162138
};
163139
```
@@ -203,21 +179,21 @@ func convert(s string, numRows int) string {
203179
if numRows == 1 {
204180
return s
205181
}
206-
length := len(s)
207-
result := make([]byte, length)
208-
step := 2 * numRows - 2
182+
n := len(s)
183+
ans := make([]byte, n)
184+
step := 2*numRows - 2
209185
count := 0
210186
for i := 0; i < numRows; i++ {
211-
for j := 0; j + i < length; j += step {
212-
result[count] = s[i+j]
187+
for j := 0; j+i < n; j += step {
188+
ans[count] = s[i+j]
213189
count++
214-
if i != 0 && i != numRows - 1 && j + step - i < length {
215-
result[count] = s[j+step-i]
190+
if i != 0 && i != numRows-1 && j+step-i < n {
191+
ans[count] = s[j+step-i]
216192
count++
217193
}
218194
}
219195
}
220-
return string(result)
196+
return string(ans)
221197
}
222198
```
223199

Lines changed: 14 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,21 @@
1-
// @ID:6. ZigZag Conversion
2-
// @author:jxdeng3989
3-
41
class Solution {
52
public:
63
string convert(string s, int numRows) {
7-
string retstr;
8-
if(1==numRows)
9-
return s;
10-
for(int i=0; i<numRows; ++i)
4+
if (numRows == 1) return s;
5+
string ans;
6+
int group = 2 * numRows - 2;
7+
for (int i = 1; i <= numRows; ++i)
118
{
12-
retstr.push_back(s[i]);
13-
int maxspan = 2*(numRows-1);
14-
int span1 = maxspan-i*2;
15-
int span2 = maxspan - span1;
16-
int cntpos = i;
17-
if(span1==0)
18-
span1 = span2;
19-
if(span2==0)
20-
span2 = span1;
21-
while(1)
22-
{
23-
if(cntpos+span1>=s.size())
24-
break;
25-
cntpos += span1;
26-
retstr.push_back(s[cntpos]);
27-
28-
if(cntpos+span2>=s.size())
29-
break;
30-
cntpos += span2;
31-
retstr.push_back(s[cntpos]);
32-
}
9+
int interval = i == numRows ? group : 2 * numRows - 2 * i;
10+
int idx = i - 1;
11+
while (idx < s.length())
12+
{
13+
ans.push_back(s[idx]);
14+
idx += interval;
15+
interval = group - interval;
16+
if (interval == 0) interval = group;
17+
}
3318
}
34-
return retstr;
19+
return ans;
3520
}
3621
};

0 commit comments

Comments
 (0)