From 70fe6d292cc2548ecde0b2e64d6b6651d7d13315 Mon Sep 17 00:00:00 2001 From: mayiming <1627832236@qq.com> Date: Sat, 23 Aug 2025 23:09:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=B0=E9=A2=98=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 矩阵/矩阵置零/main.go | 22 +++++++++- 矩阵/螺旋矩阵/main.go | 82 +++++++++++++++++++++++++++++++++++ 链表/反转链表/main.go | 25 +++++++++++ 链表/合并两个有序链表/main.go | 20 +++++++++ 链表/回文链表/main.go | 40 +++++++++++++++++ 链表/环形链表/main.go | 23 ++++++++++ 链表/环形链表2/main.go | 22 ++++++++++ 链表/相交链表/main.go | 28 ++++++++++++ 8 files changed, 260 insertions(+), 2 deletions(-) create mode 100644 矩阵/螺旋矩阵/main.go create mode 100644 链表/反转链表/main.go create mode 100644 链表/合并两个有序链表/main.go create mode 100644 链表/回文链表/main.go create mode 100644 链表/环形链表/main.go create mode 100644 链表/环形链表2/main.go create mode 100644 链表/相交链表/main.go diff --git a/矩阵/矩阵置零/main.go b/矩阵/矩阵置零/main.go index 6b5d4ab..8f02727 100644 --- a/矩阵/矩阵置零/main.go +++ b/矩阵/矩阵置零/main.go @@ -1,9 +1,27 @@ package main func main() { - + setZeroes([][]int{{0, 1, 2, 0}, {3, 4, 5, 2}, {1, 3, 1, 5}}) } func setZeroes(matrix [][]int) { - + col := make([]bool, len(matrix[0])) + row := make([]bool, len(matrix)) + for i := range matrix { + for j := range matrix[i] { + if matrix[i][j] == 0 { + col[j] = true + row[i] = true + } + } + } + //fmt.Println("col", col) + //fmt.Println("row", row) + for i := range matrix { + for j := range matrix[i] { + if row[i] || col[j] { + matrix[i][j] = 0 + } + } + } } diff --git a/矩阵/螺旋矩阵/main.go b/矩阵/螺旋矩阵/main.go new file mode 100644 index 0000000..159ce43 --- /dev/null +++ b/矩阵/螺旋矩阵/main.go @@ -0,0 +1,82 @@ +package main + +func main() { + //fmt.Println(spiralOrder([][]int{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24}})) +} + +//func spiralOrder(matrix [][]int) []int { +// step := len(matrix) * len(matrix[0]) +// forward := make([][]string, len(matrix)) +// result := make([]int, 0) +// for i := range forward { +// forward[i] = make([]string, len(matrix[0])) +// for j := range forward[i] { +// forward[i][j] = "" // 初始化为空字符串 +// } +// } +// //fmt.Println(forward, "1") +// for i := 0; i < len(matrix); i++ { +// for j := 0; j < len(matrix[i]); j++ { +// if j-1 < 0 && i-1 < 0 { +// if len(matrix[i]) == 1 { +// forward[i][j] = "d" +// continue +// } +// forward[i][j] = "r" +// continue +// } +// if j+1 > len(forward[0])-1 && i-1 < 0 { +// forward[i][j] = "d" +// continue +// } +// if j+1 > len(forward[0])-1 && i+1 > len(forward)-1 { +// forward[i][j] = "l" +// continue +// } +// if j-1 < 0 && i+1 > len(forward)-1 { +// forward[i][j] = "u" +// continue +// } +// } +// } +// fmt.Println(forward, "2") +// left, right := 0, 0 +// nowforward := forward[left][right] +// for { +// if step == 0 { +// break +// } +// fmt.Println("当前forward:", nowforward) +// if forward[left][right] != "" { +// nowforward = forward[left][right] +// } +// if nowforward == "u" && left-1 >= 0 { +// if forward[left-1][right] != "" { +// //fmt.Println("向上:", forward[left-1][right]) +// result = append(result, matrix[left][right]) +// nowforward = "r" +// right++ +// step-- +// continue +// } +// +// } +// //fmt.Println("本次方向:", nowforward) +// result = append(result, matrix[left][right]) +// if nowforward == "r" { +// //fmt.Println("向右") +// right++ +// } else if nowforward == "d" { +// left++ +// } else if nowforward == "l" { +// right-- +// } else if nowforward == "u" { +// //fmt.Println("变更向上:", forward[left-1][right]) +// left-- +// } +// step-- +// } +// //fmt.Println(result) +// +// return result +//} diff --git a/链表/反转链表/main.go b/链表/反转链表/main.go new file mode 100644 index 0000000..fea3e91 --- /dev/null +++ b/链表/反转链表/main.go @@ -0,0 +1,25 @@ +package main + +type ListNode struct { + Val int + Next *ListNode +} + +func main() { + +} +func reverseList(head *ListNode) *ListNode { + pre := (*ListNode)(nil) + res := (*ListNode)(nil) + for head != nil { + next := head.Next + head.Next = pre + pre = head + if next == nil { + res = head + break + } + head = next + } + return res +} diff --git a/链表/合并两个有序链表/main.go b/链表/合并两个有序链表/main.go new file mode 100644 index 0000000..e128ef1 --- /dev/null +++ b/链表/合并两个有序链表/main.go @@ -0,0 +1,20 @@ +package main + +type ListNode struct { + Val int + Next *ListNode +} + +func main() { + +} +func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode { + upP := list1 + dnP := list2 + for upP.Next != nil && dnP.Next != nil { + if upP.Next == nil { + + } + } + return nil +} diff --git a/链表/回文链表/main.go b/链表/回文链表/main.go new file mode 100644 index 0000000..c24b23a --- /dev/null +++ b/链表/回文链表/main.go @@ -0,0 +1,40 @@ +package main + +type ListNode struct { + Val int + Next *ListNode +} + +func main() { + +} +func isPalindrome(head *ListNode) bool { + numlist := make([]int, 0) + for head != nil { + numlist = append(numlist, head.Val) + head = head.Next + } + if len(numlist) == 1 { + return true + } + left := len(numlist)/2 - 1 + right := left + 1 + if len(numlist)%2 != 0 { + left = len(numlist) / 2 + right = left + } else { + left = len(numlist)/2 - 1 + right = left + 1 + } + + for left >= 0 { + if numlist[left] == numlist[right] { + left-- + right++ + } else { + return false + } + } + + return true +} diff --git a/链表/环形链表/main.go b/链表/环形链表/main.go new file mode 100644 index 0000000..8a5390d --- /dev/null +++ b/链表/环形链表/main.go @@ -0,0 +1,23 @@ +package main + +type ListNode struct { + Val int + Next *ListNode +} + +func main() { + +} + +func hasCycle(head *ListNode) bool { + hash := make(map[*ListNode]struct{}) + for head != nil { + if _, ok := hash[head.Next]; ok { + return true + } + hash[head] = struct{}{} + head = head.Next + } + + return false +} diff --git a/链表/环形链表2/main.go b/链表/环形链表2/main.go new file mode 100644 index 0000000..6b20dd7 --- /dev/null +++ b/链表/环形链表2/main.go @@ -0,0 +1,22 @@ +package main + +type ListNode struct { + Val int + Next *ListNode +} + +func main() { + +} +func detectCycle(head *ListNode) *ListNode { + hash := make(map[*ListNode]struct{}) + for head != nil { + if _, ok := hash[head.Next]; ok { + return head.Next + } + hash[head] = struct{}{} + head = head.Next + } + + return nil +} diff --git a/链表/相交链表/main.go b/链表/相交链表/main.go new file mode 100644 index 0000000..ff611d6 --- /dev/null +++ b/链表/相交链表/main.go @@ -0,0 +1,28 @@ +package main + +type ListNode struct { + Val int + Next *ListNode +} + +func main() { + +} +func getIntersectionNode(headA, headB *ListNode) *ListNode { + Anode, Bnode := headA, headB + hash := make(map[*ListNode]struct{}) + + for Anode != nil { + hash[Anode] = struct{}{} + Anode = Anode.Next + } + for Bnode != nil { + if _, ok := hash[Bnode]; ok { + return Bnode + } + Bnode = Bnode.Next + } + + return nil + +}