-
-
Notifications
You must be signed in to change notification settings - Fork 5.6k
/
838. Push Dominoes.go
76 lines (73 loc) · 1.31 KB
/
838. Push Dominoes.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package leetcode
// 解法一
func pushDominoes(dominoes string) string {
d := []byte(dominoes)
for i := 0; i < len(d); {
j := i + 1
for j < len(d)-1 && d[j] == '.' {
j++
}
push(d[i : j+1])
i = j
}
return string(d)
}
func push(d []byte) {
first, last := 0, len(d)-1
switch d[first] {
case '.', 'L':
if d[last] == 'L' {
for ; first < last; first++ {
d[first] = 'L'
}
}
case 'R':
if d[last] == '.' || d[last] == 'R' {
for ; first <= last; first++ {
d[first] = 'R'
}
} else if d[last] == 'L' {
for first < last {
d[first] = 'R'
d[last] = 'L'
first++
last--
}
}
}
}
// 解法二
func pushDominoes1(dominoes string) string {
dominoes = "L" + dominoes + "R"
res := ""
for i, j := 0, 1; j < len(dominoes); j++ {
if dominoes[j] == '.' {
continue
}
if i > 0 {
res += string(dominoes[i])
}
middle := j - i - 1
if dominoes[i] == dominoes[j] {
for k := 0; k < middle; k++ {
res += string(dominoes[i])
}
} else if dominoes[i] == 'L' && dominoes[j] == 'R' {
for k := 0; k < middle; k++ {
res += string('.')
}
} else {
for k := 0; k < middle/2; k++ {
res += string('R')
}
for k := 0; k < middle%2; k++ {
res += string('.')
}
for k := 0; k < middle/2; k++ {
res += string('L')
}
}
i = j
}
return res
}