Skip to content

Commit 1981ac7

Browse files
committed
add question: 24, swap nodes in pairs
1 parent efe3a4b commit 1981ac7

File tree

16 files changed

+515
-56
lines changed

16 files changed

+515
-56
lines changed

README.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ leetcode 本地化刷题/测试/上传
3030
可以得到测试结果:
3131
```shell script
3232
+------+--------------------------------+----------+----------+
33-
| 序号 | 用例名称 | 测试状态 | 失败原因 |
33+
| 序号 | 用例名称 | 测试状态 | 失败原因 |
3434
+------+--------------------------------+----------+----------+
3535
| 1/4 | test-nil | PASS | |
3636
| 2/4 | test-empty | PASS | |
@@ -51,15 +51,15 @@ leetcode 本地化刷题/测试/上传
5151
得到输出:
5252
```shell script
5353
+----------+------------------------------+
54-
| 标题 | Clone Graph |
54+
| 标题 | Clone Graph |
5555
+----------+------------------------------+
56-
| 问题ID | 133 |
56+
| 问题ID | 133 |
5757
+----------+------------------------------+
58-
| 中文标题 | 克隆图 |
58+
| 中文标题 | 克隆图 |
5959
+----------+------------------------------+
60-
| 标签 | 深度优先搜索,广度优先搜索,图 |
60+
| 标签 | 深度优先搜索,广度优先搜索,图 |
6161
+----------+------------------------------+
62-
| 难度 | 中等 |
62+
| 难度 | 中等 |
6363
+----------+------------------------------+
6464
```
6565

@@ -137,7 +137,7 @@ Use "leetcode [command] --help" for more information about a command.
137137
`leetcode test ...` 解答完问题,跑测试用例
138138
```shell script
139139
+------+--------------------------------+----------+----------+
140-
| 序号 | 用例名称 | 测试状态 | 失败原因 |
140+
| 序号 | 用例名称 | 测试状态 | 失败原因 |
141141
+------+--------------------------------+----------+----------+
142142
| 1/4 | test-nil | PASS | |
143143
| 2/4 | test-empty | PASS | |
@@ -149,15 +149,15 @@ Use "leetcode [command] --help" for more information about a command.
149149
`leetcode info ...` 查看问题基础信息
150150
```shell script
151151
+----------+------------------------------+
152-
| 标题 | Clone Graph |
152+
| 标题 | Clone Graph |
153153
+----------+------------------------------+
154-
| 问题ID | 133 |
154+
| 问题ID | 133 |
155155
+----------+------------------------------+
156-
| 中文标题 | 克隆图 |
156+
| 中文标题 | 克隆图 |
157157
+----------+------------------------------+
158-
| 标签 | 深度优先搜索,广度优先搜索,图 |
159-
+----------+------------------------------+
160-
| 难度 | 中等 |
158+
| 标签 | 深度优先搜索,广度优先搜索,图 |
159+
+----------+-----------------------------+
160+
| 难度 | 中等 |
161161
+----------+------------------------------+
162162
```
163163

cmd/command/base.go

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,6 @@ var baseCmd = &cobra.Command{
3939
info.Print(withDetail)
4040

4141
for idx, dir := range info.SaveDir {
42-
for _, language := range info.Languages {
43-
err = leet.BackupClear{
44-
Dir: dir,
45-
Language: language,
46-
}.Clear()
47-
if err != nil {
48-
fmt.Println(err.Error())
49-
}
50-
}
5142

5243
if idx > 0 {
5344
err = leet.CopyDirectory(info.SaveDir[0], info.SaveDir[idx])
@@ -62,6 +53,16 @@ var baseCmd = &cobra.Command{
6253
if err != nil {
6354
fmt.Println(err.Error())
6455
}
56+
57+
for _, language := range info.Languages {
58+
err = leet.BackupClear{
59+
Dir: dir,
60+
Language: language,
61+
}.Clear()
62+
if err != nil {
63+
fmt.Println(err.Error())
64+
}
65+
}
6566
}
6667

6768
} else {
@@ -70,15 +71,6 @@ var baseCmd = &cobra.Command{
7071
for _, title := range titles {
7172
info := leet.GetQuestionInfo(title)
7273
for idx, dir := range info.SaveDir {
73-
for _, language := range info.Languages {
74-
err := leet.BackupClear{
75-
Dir: dir,
76-
Language: language,
77-
}.Clear()
78-
if err != nil {
79-
fmt.Println(err.Error())
80-
}
81-
}
8274

8375
if idx > 0 {
8476
err := leet.CopyDirectory(info.SaveDir[0], info.SaveDir[idx])
@@ -93,6 +85,16 @@ var baseCmd = &cobra.Command{
9385
if err != nil {
9486
fmt.Println(err.Error())
9587
}
88+
89+
for _, language := range info.Languages {
90+
err := leet.BackupClear{
91+
Dir: dir,
92+
Language: language,
93+
}.Clear()
94+
if err != nil {
95+
fmt.Println(err.Error())
96+
}
97+
}
9698
}
9799
}
98100
}

cmd/command/clear.go

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,15 @@ var clearCmd = &cobra.Command{
4343
info.Print(withDetail)
4444

4545
for _, dir := range info.SaveDir {
46+
if backup {
47+
err = leet.BackupClear{
48+
Dir: dir,
49+
}.Backup(override)
50+
if err != nil {
51+
fmt.Println(err.Error())
52+
}
53+
}
54+
4655
for _, language := range info.Languages {
4756
err = leet.BackupClear{
4857
Dir: dir,
@@ -60,15 +69,6 @@ var clearCmd = &cobra.Command{
6069
for _, title := range titles {
6170
info := leet.GetQuestionInfo(title)
6271
for _, dir := range info.SaveDir {
63-
for _, language := range info.Languages {
64-
err := leet.BackupClear{
65-
Dir: dir,
66-
Language: language,
67-
}.Clear()
68-
if err != nil {
69-
fmt.Println(err.Error())
70-
}
71-
}
7272

7373
if backup {
7474
err = leet.BackupClear{
@@ -78,6 +78,16 @@ var clearCmd = &cobra.Command{
7878
fmt.Println(err.Error())
7979
}
8080
}
81+
82+
for _, language := range info.Languages {
83+
err := leet.BackupClear{
84+
Dir: dir,
85+
Language: language,
86+
}.Clear()
87+
if err != nil {
88+
fmt.Println(err.Error())
89+
}
90+
}
8191
}
8292
}
8393
}

leet/golang.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ func Export() {
5454
mainCode := fmt.Sprintf(`package main
5555
5656
import (
57+
"context"
58+
"fmt"
59+
"reflect"
60+
"time"
61+
5762
"github.com/gladmo/leetcode/%s"
5863
"github.com/gladmo/leetcode/leet"
5964
)
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"reflect"
7+
"time"
8+
9+
"github.com/gladmo/leetcode/leet"
10+
"github.com/gladmo/leetcode/questions/serial/中等/24/golang/solution"
11+
"github.com/gladmo/leetcode/utils/list"
12+
)
13+
14+
func main() {
15+
16+
tests := []struct {
17+
name string
18+
input *solution.ListNode
19+
want string
20+
}{
21+
{
22+
name: "test-[1,2,3,4]",
23+
input: list.CreateNode("[1,2,3,4]"),
24+
want: "[2,1,4,3]",
25+
},
26+
{
27+
name: "test-[]",
28+
input: list.CreateNode("[]"),
29+
want: "[]",
30+
},
31+
{
32+
name: "test-[1]",
33+
input: list.CreateNode("[1]"),
34+
want: "[1]",
35+
},
36+
}
37+
38+
testLog := leet.NewTestLog(len(tests))
39+
defer testLog.Render()
40+
41+
timeoutDuration := time.Second * 2
42+
43+
for idx, test := range tests {
44+
// 超时检测
45+
timeout := leet.Timeout(timeoutDuration, func(ctx context.Context, cancel context.CancelFunc) {
46+
solution.Export(test.input)
47+
solution.Export(test.input)
48+
cancel()
49+
})
50+
51+
if timeout {
52+
testLog.Fail(idx+1, test.name, "timeout")
53+
continue
54+
}
55+
56+
got := solution.Export(test.input)
57+
if !reflect.DeepEqual(test.want, got.String()) {
58+
testLog.Fail(idx+1, test.name, fmt.Sprintf("want: %v, got %v.", test.want, got))
59+
continue
60+
}
61+
62+
testLog.Pass(idx+1, test.name)
63+
}
64+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package solution
2+
3+
import (
4+
"github.com/gladmo/leetcode/utils/list"
5+
)
6+
7+
// type ListNode struct {
8+
// Val int
9+
// Next *ListNode
10+
// }
11+
type ListNode = list.Node
12+
13+
func Export(head *ListNode) *ListNode {
14+
return swapPairs(head)
15+
}
16+
17+
/****************************************************/
18+
/******** 以下为 Leetcode 示例部分(提交PR请还原) *******/
19+
/******** 使用 (./leetcode clear) 初始化所有问题 *******/
20+
/****************************************************/
21+
22+
/**
23+
* Definition for singly-linked list.
24+
* type ListNode struct {
25+
* Val int
26+
* Next *ListNode
27+
* }
28+
*/
29+
func swapPairs(head *ListNode) *ListNode {
30+
31+
var helper func(node *ListNode)
32+
33+
helper = func(node *ListNode) {
34+
if node == nil {
35+
return
36+
}
37+
38+
if node.Next != nil {
39+
node.Val, node.Next.Val = node.Next.Val, node.Val
40+
41+
if node.Next.Next != nil {
42+
helper(node.Next.Next)
43+
}
44+
}
45+
}
46+
47+
helper(head)
48+
49+
return head
50+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package solution
2+
3+
4+
type ListNode struct {
5+
Val int
6+
Next *ListNode
7+
}
8+
9+
func Export(head *ListNode) *ListNode {
10+
return swapPairs(head)
11+
}
12+
13+
/****************************************************/
14+
/******** 以下为 Leetcode 示例部分(提交PR请还原) *******/
15+
/******** 使用 (./leetcode clear) 初始化所有问题 *******/
16+
/****************************************************/
17+
18+
/**
19+
* Definition for singly-linked list.
20+
* type ListNode struct {
21+
* Val int
22+
* Next *ListNode
23+
* }
24+
*/
25+
func swapPairs(head *ListNode) *ListNode {
26+
27+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
## [两两交换链表中的节点](https://leetcode-cn.com/problems/swap-nodes-in-pairs/)
2+
3+
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
4+
5+
**你不能只是单纯的改变节点内部的值**,而是需要实际的进行节点交换。
6+
7+
 
8+
9+
**示例 1:**
10+
11+
![image](https://assets.leetcode.com/uploads/2020/10/03/swap_ex1.jpg)
12+
`
13+
**输入:**head = [1,2,3,4]
14+
**输出:**[2,1,4,3]
15+
`
16+
17+
**示例 2:**
18+
19+
`
20+
**输入:**head = []
21+
**输出:**[]
22+
`
23+
24+
**示例 3:**
25+
26+
`
27+
**输入:**head = [1]
28+
**输出:**[1]
29+
`
30+
31+
 
32+
33+
**提示:**
34+
35+
* 链表中节点的数目在范围 `[0, 100]`
36+
* `0 <= Node.val <= 100`

questions/store.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)