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 e26e506

Browse files
feat: update solutions to lc problem: No.0006 (doocs#4478)
No.0006.Zigzag Conversion
1 parent a0a5cb7 commit e26e506

File tree

11 files changed

+84
-586
lines changed

11 files changed

+84
-586
lines changed

‎solution/0000-0099/0006.Zigzag Conversion/README.md‎

Lines changed: 29 additions & 212 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,9 @@ P I
7878

7979
### 方法一:模拟
8080

81-
我们用一个二维数组 $g$ 来模拟 $Z$ 字形排列的过程,其中 $g[i][j]$ 表示第 $i$ 行第 $j$ 列的字符。初始时 $i=0,ドル另外我们定义一个方向变量 $k,ドル初始时 $k=-1,ドル表示向上走。
81+
我们用一个二维数组 $g$ 来模拟 Z 字形排列的过程,其中 $g[i][j]$ 表示第 $i$ 行第 $j$ 列的字符。初始时 $i = 0,ドル另外我们定义一个方向变量 $k,ドル初始时 $k = -1,ドル表示向上走。
8282

83-
我们从左到右遍历字符串 $s,ドル每次遍历到一个字符 $c,ドル将其追加到 $g[i]$ 中,如果此时 $i=0$ 或者 $i=numRows-1,ドル说明当前字符位于 $Z$ 字形排列的拐点,我们将 $k$ 的值反转,即 $k=-k$。接下来,我们将 $i$ 的值更新为 $i+k,ドル即向上或向下移动一行。继续遍历下一个字符,直到遍历完字符串 $s,ドル我们返回 $g$ 中所有行拼接后的字符串即可。
83+
我们从左到右遍历字符串 $s,ドル每次遍历到一个字符 $c,ドル将其追加到 $g[i]$ 中如果此时 $i = 0$ 或者 $i = \textit{numRows} - 1,ドル说明当前字符位于 Z 字形排列的拐点,我们将 $k$ 的值反转,即 $k = -k$。接下来,我们将 $i$ 的值更新为 $i + k,ドル即向上或向下移动一行。继续遍历下一个字符,直到遍历完字符串 $s,ドル我们返回 $g$ 中所有行拼接后的字符串即可。
8484

8585
时间复杂度 $O(n),ドル空间复杂度 $O(n)$。其中 $n$ 为字符串 $s$ 的长度。
8686

@@ -199,29 +199,24 @@ function convert(s: string, numRows: number): string {
199199
```rust
200200
impl Solution {
201201
pub fn convert(s: String, num_rows: i32) -> String {
202-
let num_rows = num_rows as usize;
203202
if num_rows == 1 {
204203
return s;
205204
}
206-
let mut ss = vec![String::new(); num_rows];
205+
206+
let num_rows = num_rows as usize;
207+
let mut g = vec![String::new(); num_rows];
207208
let mut i = 0;
208-
let mut to_down = true;
209+
let mut k = -1;
210+
209211
for c in s.chars() {
210-
ss[i].push(c);
211-
if to_down {
212-
i += 1;
213-
} else {
214-
i -= 1;
215-
}
212+
g[i].push(c);
216213
if i == 0 || i == num_rows - 1 {
217-
to_down = !to_down;
214+
k = -k;
218215
}
216+
i = (i as isize + k) as usize;
219217
}
220-
let mut res = String::new();
221-
for i in 0..num_rows {
222-
res += &ss[i];
223-
}
224-
res
218+
219+
g.concat()
225220
}
226221
}
227222
```
@@ -323,220 +318,42 @@ char* convert(char* s, int numRows) {
323318
}
324319
```
325320
326-
<!-- tabs:end -->
327-
328-
<!-- solution:end -->
329-
330-
<!-- solution:start -->
331-
332-
### 方法二
333-
334-
<!-- tabs:start -->
335-
336-
#### Python3
337-
338-
```python
339-
class Solution:
340-
def convert(self, s: str, numRows: int) -> str:
341-
if numRows == 1:
342-
return s
343-
group = 2 * numRows - 2
344-
ans = []
345-
for i in range(1, numRows + 1):
346-
interval = group if i == numRows else 2 * numRows - 2 * i
347-
idx = i - 1
348-
while idx < len(s):
349-
ans.append(s[idx])
350-
idx += interval
351-
interval = group - interval
352-
if interval == 0:
353-
interval = group
354-
return ''.join(ans)
355-
```
356-
357-
#### Java
358-
359-
```java
360-
class Solution {
361-
public String convert(String s, int numRows) {
362-
if (numRows == 1) {
363-
return s;
364-
}
365-
StringBuilder ans = new StringBuilder();
366-
int group = 2 * numRows - 2;
367-
for (int i = 1; i <= numRows; i++) {
368-
int interval = i == numRows ? group : 2 * numRows - 2 * i;
369-
int idx = i - 1;
370-
while (idx < s.length()) {
371-
ans.append(s.charAt(idx));
372-
idx += interval;
373-
interval = group - interval;
374-
if (interval == 0) {
375-
interval = group;
376-
}
377-
}
378-
}
379-
return ans.toString();
380-
}
381-
}
382-
```
383-
384-
#### C++
385-
386-
```cpp
387-
class Solution {
388-
public:
389-
string convert(string s, int numRows) {
390-
if (numRows == 1) return s;
391-
string ans;
392-
int group = 2 * numRows - 2;
393-
for (int i = 1; i <= numRows; ++i) {
394-
int interval = i == numRows ? group : 2 * numRows - 2 * i;
395-
int idx = i - 1;
396-
while (idx < s.length()) {
397-
ans.push_back(s[idx]);
398-
idx += interval;
399-
interval = group - interval;
400-
if (interval == 0) interval = group;
401-
}
402-
}
403-
return ans;
404-
}
405-
};
406-
```
407-
408-
#### Go
409-
410-
```go
411-
func convert(s string, numRows int) string {
412-
if numRows == 1 {
413-
return s
414-
}
415-
n := len(s)
416-
ans := make([]byte, n)
417-
step := 2*numRows - 2
418-
count := 0
419-
for i := 0; i < numRows; i++ {
420-
for j := 0; j+i < n; j += step {
421-
ans[count] = s[i+j]
422-
count++
423-
if i != 0 && i != numRows-1 && j+step-i < n {
424-
ans[count] = s[j+step-i]
425-
count++
426-
}
427-
}
428-
}
429-
return string(ans)
430-
}
431-
```
432-
433-
#### TypeScript
434-
435-
```ts
436-
function convert(s: string, numRows: number): string {
437-
if (numRows === 1) {
438-
return s;
439-
}
440-
const ss = new Array(numRows).fill('');
441-
let i = 0;
442-
let toDown = true;
443-
for (const c of s) {
444-
ss[i] += c;
445-
if (toDown) {
446-
i++;
447-
} else {
448-
i--;
449-
}
450-
if (i === 0 || i === numRows - 1) {
451-
toDown = !toDown;
452-
}
453-
}
454-
return ss.reduce((r, s) => r + s);
455-
}
456-
```
457-
458-
#### Rust
459-
460-
```rust
461-
impl Solution {
462-
pub fn convert(s: String, num_rows: i32) -> String {
463-
let num_rows = num_rows as usize;
464-
let mut rows = vec![String::new(); num_rows];
465-
let iter = (0..num_rows).chain((1..num_rows - 1).rev()).cycle();
466-
iter.zip(s.chars()).for_each(|(i, c)| rows[i].push(c));
467-
rows.into_iter().collect()
468-
}
469-
}
470-
```
471-
472-
#### JavaScript
473-
474-
```js
475-
/**
476-
* @param {string} s
477-
* @param {number} numRows
478-
* @return {string}
479-
*/
480-
var convert = function (s, numRows) {
481-
if (numRows == 1) return s;
482-
const arr = new Array(numRows);
483-
for (let i = 0; i < numRows; i++) arr[i] = [];
484-
let mi = 0,
485-
isDown = true;
486-
for (const c of s) {
487-
arr[mi].push(c);
488-
489-
if (mi >= numRows - 1) isDown = false;
490-
else if (mi <= 0) isDown = true;
491-
492-
if (isDown) mi++;
493-
else mi--;
494-
}
495-
let ans = [];
496-
for (const item of arr) {
497-
ans = ans.concat(item);
498-
}
499-
return ans.join('');
500-
};
501-
```
502-
503321
#### PHP
504322
505323
```php
506324
class Solution {
507325
/**
508-
* @param string $s
509-
* @param int $numRows
510-
* @return string
326+
* @param String $s
327+
* @param Integer $numRows
328+
* @return String
511329
*/
512-
513330
function convert($s, $numRows) {
514-
if ($numRows == 1 || strlen($s) <= $numRows) {
331+
if ($numRows == 1) {
515332
return $s;
516333
}
517334
518-
$result = '';
519-
$cycleLength = 2 * $numRows - 2;
520-
$n = strlen($s);
335+
$g = array_fill(0, $numRows, '');
336+
$i = 0;
337+
$k = -1;
521338
522-
for ($i = 0; $i < $numRows; $i++) {
523-
for ($j = 0; $j + $i < $n; $j += $cycleLength) {
524-
$result .= $s[$j + $i];
339+
$length = strlen($s);
340+
for ($j = 0; $j < $length; $j++) {
341+
$c = $s[$j];
342+
$g[$i] .= $c;
525343
526-
if ($i != 0 && $i != $numRows - 1 && $j + $cycleLength - $i < $n) {
527-
$result .= $s[$j + $cycleLength - $i];
528-
}
344+
if ($i == 0 || $i == $numRows - 1) {
345+
$k = -$k;
529346
}
530-
}
531347
532-
return $result;
348+
$i += $k;
349+
}
350+
return implode('', $g);
533351
}
534352
}
535-
``
353+
```
536354

537355
<!-- tabs:end -->
538356

539357
<!-- solution:end -->
540358

541359
<!-- problem:end -->
542-
```

0 commit comments

Comments
(0)

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