Skip to content

Commit f24cf88

Browse files
author
xemxx
committed
update: 每日一题
1 parent d2b03b8 commit f24cf88

File tree

46 files changed

+3677
-19
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+3677
-19
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,6 @@
22
done/question
33
.DS_Store
44
.idea/*
5-
cn
5+
cn
6+
main
7+
node_modules

a.go

Lines changed: 0 additions & 13 deletions
This file was deleted.
Lines changed: 292 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,292 @@
1+
package main
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
"strconv"
7+
"strings"
8+
)
9+
10+
// ListNode Definition for singly-linked list.
11+
type ListNode struct {
12+
Val int
13+
Next *ListNode
14+
}
15+
16+
// TreeNode Definition for a binary tree node.
17+
type TreeNode struct {
18+
Val int
19+
Left *TreeNode
20+
Right *TreeNode
21+
}
22+
23+
func serializeInterface(data interface{}) string {
24+
r2, _ := json.Marshal(data)
25+
return string(r2)
26+
}
27+
28+
func deserializeTreeNode(data string) *TreeNode {
29+
length := len(data)
30+
if length <= 2 {
31+
return nil
32+
}
33+
34+
arr := strings.Split(data[1:length-1], ",")
35+
val, _ := strconv.Atoi(arr[0])
36+
arr = arr[1:]
37+
root := &TreeNode{Val: val}
38+
queue := []*TreeNode{root}
39+
for len(queue) > 0 {
40+
node := queue[0]
41+
queue = queue[1:]
42+
if len(arr) == 0 {
43+
return root
44+
}
45+
46+
leftVal := arr[0]
47+
arr = arr[1:]
48+
if leftVal != "null" {
49+
val, _ := strconv.Atoi(leftVal)
50+
left := &TreeNode{Val: val}
51+
node.Left = left
52+
queue = append(queue, left)
53+
}
54+
if len(arr) == 0 {
55+
return root
56+
}
57+
rightVal := arr[0]
58+
arr = arr[1:]
59+
if rightVal != "null" {
60+
val, _ := strconv.Atoi(rightVal)
61+
right := &TreeNode{Val: val}
62+
node.Right = right
63+
queue = append(queue, right)
64+
}
65+
66+
}
67+
return root
68+
69+
}
70+
func deserializeTreeNodeArr(data string) []*TreeNode {
71+
length := len(data)
72+
if length <= 4 {
73+
return []*TreeNode{}
74+
}
75+
str := data[1 : length-1]
76+
r := []*TreeNode{}
77+
for i := 0; i < len(str); i++ {
78+
if str[i:i+1] == "[" {
79+
flag := false
80+
j := i + 1
81+
for ; j < len(str); j++ {
82+
if str[j:j+1] == "]" {
83+
r = append(r, deserializeTreeNode(str[i:j+1]))
84+
flag = true
85+
break
86+
}
87+
}
88+
if !flag {
89+
fmt.Print("parse error")
90+
return []*TreeNode{}
91+
}
92+
i = j
93+
}
94+
}
95+
return r
96+
97+
}
98+
func serializeTreeNode(root *TreeNode) string {
99+
if root == nil {
100+
return "[]"
101+
}
102+
var arr []string
103+
queue := []*TreeNode{root}
104+
for len(queue) > 0 {
105+
node := queue[0]
106+
queue = queue[1:]
107+
if node != nil {
108+
arr = append(arr, strconv.Itoa(node.Val))
109+
queue = append(queue, node.Left)
110+
queue = append(queue, node.Right)
111+
} else {
112+
arr = append(arr, "null")
113+
}
114+
115+
}
116+
var i = len(arr) - 1
117+
for arr[i] == "null" {
118+
i--
119+
}
120+
arr = arr[0 : i+1]
121+
return "[" + strings.Join(arr, ",") + "]"
122+
}
123+
124+
func serializeTreeNodeArr(arr []*TreeNode) string {
125+
strArr := "["
126+
for i := 0; i < len(arr); i++ {
127+
strArr += serializeTreeNode(arr[i])
128+
if i != len(arr)-1 {
129+
strArr += ","
130+
}
131+
}
132+
strArr += "]"
133+
return strArr
134+
}
135+
136+
func deserializeListNode(data string) *ListNode {
137+
length := len(data)
138+
if length <= 2 {
139+
return nil
140+
}
141+
arr := strings.Split(data[1:length-1], ",")
142+
143+
c := arr[0]
144+
arr = arr[1:]
145+
val, _ := strconv.Atoi(c)
146+
root := &ListNode{Val: val}
147+
p := root
148+
for len(arr) > 0 {
149+
150+
c := arr[0]
151+
arr = arr[1:]
152+
val, _ := strconv.Atoi(c)
153+
node := &ListNode{Val: val}
154+
p.Next = node
155+
p = node
156+
}
157+
return root
158+
}
159+
160+
func deserializeListNodeArr(data string) []*ListNode {
161+
length := len(data)
162+
if length <= 4 {
163+
return []*ListNode{}
164+
}
165+
str := data[1 : length-1]
166+
r := []*ListNode{}
167+
for i := 0; i < len(str); i++ {
168+
if str[i:i+1] == "[" {
169+
flag := false
170+
j := i + 1
171+
for ; j < len(str); j++ {
172+
if str[j:j+1] == "]" {
173+
r = append(r, deserializeListNode(str[i:j+1]))
174+
flag = true
175+
break
176+
}
177+
}
178+
if !flag {
179+
//解析错误
180+
fmt.Print("解析错误")
181+
return []*ListNode{}
182+
}
183+
i = j
184+
}
185+
}
186+
return r
187+
}
188+
func serializeListNode(root *ListNode) string {
189+
var arr []string
190+
p := root
191+
for p != nil {
192+
arr = append(arr, strconv.Itoa(p.Val))
193+
p = p.Next
194+
}
195+
return "[" + strings.Join(arr, ",") + "]"
196+
}
197+
func serializeListNodeArr(arr []*ListNode) string {
198+
newArr := []string{}
199+
for i := 0; i < len(arr); i++ {
200+
newArr = append(newArr, serializeListNode(arr[i]))
201+
}
202+
return "[" + strings.Join(newArr, ",") + "]"
203+
}
204+
205+
func parseInteger(param string) int {
206+
num, err := strconv.Atoi(param)
207+
if err != nil {
208+
panic(err)
209+
}
210+
return num
211+
}
212+
func parseString(param string) string {
213+
var r string
214+
json.Unmarshal([]byte(param), &r)
215+
return r
216+
}
217+
func parseChar(param string) byte {
218+
r := parseString(param)
219+
return r[0]
220+
}
221+
func parseFloat(param string) float64 {
222+
num, err := strconv.ParseFloat(param, 64)
223+
if err != nil {
224+
panic(err)
225+
}
226+
return num
227+
}
228+
func parseIntegerArr(param string) []int {
229+
var r []int
230+
json.Unmarshal([]byte(param), &r)
231+
return r
232+
}
233+
func parseStringArr(param string) []string {
234+
var r []string
235+
json.Unmarshal([]byte(param), &r)
236+
return r
237+
}
238+
func parseCharArr(param string) []byte {
239+
strArr := parseStringArr(param)
240+
var r []byte
241+
for i := 0; i < len(strArr); i++ {
242+
r = append(r, strArr[i][0])
243+
}
244+
return r
245+
}
246+
func parseIntegerArrArr(param string) [][]int {
247+
var r [][]int
248+
json.Unmarshal([]byte(param), &r)
249+
return r
250+
}
251+
252+
func parseStringArrArr(param string) [][]string {
253+
var r [][]string
254+
json.Unmarshal([]byte(param), &r)
255+
return r
256+
}
257+
func parseCharArrArr(param string) [][]byte {
258+
strArrArr := parseStringArrArr(param)
259+
var r [][]byte
260+
for i := 0; i < len(strArrArr); i++ {
261+
var item []byte
262+
for j := 0; j < len(strArrArr[i]); j++ {
263+
item = append(item, strArrArr[i][j][0])
264+
}
265+
r = append(r, item)
266+
}
267+
return r
268+
}
269+
func serializeFloat(a float64) string {
270+
return strconv.FormatFloat(a, 'f', 5, 64)
271+
}
272+
func serializeChar(a byte) string {
273+
return serializeInterface(string(a))
274+
}
275+
func serializeCharArr(a []byte) string {
276+
var strArr []string
277+
for i := 0; i < len(a); i++ {
278+
strArr = append(strArr, string(a[i]))
279+
}
280+
return serializeInterface(strArr)
281+
}
282+
func serializeCharArrArr(a [][]byte) string {
283+
var strArr [][]string
284+
for i := 0; i < len(a); i++ {
285+
var item []string
286+
for j := 0; j < len(a[i]); j++ {
287+
item = append(item, string(a[i][j]))
288+
}
289+
strArr = append(strArr, item)
290+
}
291+
return serializeInterface(strArr)
292+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module lc101
2+
3+
go 1.20
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package main
2+
import "fmt"
3+
func main(){
4+
str := "[[\"[1,2,2,3,4,4,3]\"],[\"[1,2,2,null,3,null,3]\"]]"
5+
arr := parseStringArrArr(str)
6+
for i:=0;i<len(arr);i++ {
7+
unitArgs:=arr[i]
8+
arg0 := deserializeTreeNode(unitArgs[0]);
9+
result := isSymmetric(arg0);
10+
resultabc :=serializeInterface(result);
11+
fmt.Printf("resultabc%d:%sresultend", i,resultabc)
12+
}
13+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// @algorithm @lc id=101 lang=golang
2+
// @title symmetric-tree
3+
4+
package main
5+
6+
// @test([1,2,2,3,4,4,3])=true
7+
// @test([1,2,2,null,3,null,3])=false
8+
/**
9+
* Definition for a binary tree node.
10+
* type TreeNode struct {
11+
* Val int
12+
* Left *TreeNode
13+
* Right *TreeNode
14+
* }
15+
*/
16+
func isSymmetric(root *TreeNode) bool {
17+
result := []int{}
18+
19+
cur := []*TreeNode{root}
20+
nxt := []*TreeNode{}
21+
22+
for len(cur) > 0 {
23+
n := cur[0]
24+
cur = cur[1:]
25+
if n == nil {
26+
result = append(result, -101)
27+
} else {
28+
nxt = append(nxt, n.Left, n.Right)
29+
result = append(result, n.Val)
30+
}
31+
if len(cur) == 0 {
32+
//check
33+
if len(result) > 1 {
34+
for i, j := 0, len(result)-1; i < j; {
35+
if result[i] != result[j] {
36+
return false
37+
}
38+
i++
39+
j--
40+
}
41+
}
42+
result = result[:0]
43+
cur, nxt = nxt, cur
44+
nxt = nxt[:]
45+
nxt = nxt[:0]
46+
if len(cur)%2 > 0 {
47+
return false
48+
}
49+
}
50+
}
51+
return true
52+
}

0 commit comments

Comments
 (0)