添加 problem 959

This commit is contained in:
YDZ
2019-08-04 20:20:09 +08:00
parent d721ebe5a9
commit 970105f1d7
2 changed files with 101 additions and 0 deletions

View File

@ -0,0 +1,40 @@
package leetcode
func regionsBySlashes(grid []string) int {
size := len(grid)
uf := UnionFind{}
uf.init(4 * size * size)
for i := 0; i < size; i++ {
for j := 0; j < size; j++ {
switch grid[i][j] {
case '\\':
uf.union(getFaceIdx(size, i, j, 0), getFaceIdx(size, i, j, 1))
uf.union(getFaceIdx(size, i, j, 2), getFaceIdx(size, i, j, 3))
case '/':
uf.union(getFaceIdx(size, i, j, 0), getFaceIdx(size, i, j, 3))
uf.union(getFaceIdx(size, i, j, 2), getFaceIdx(size, i, j, 1))
case ' ':
uf.union(getFaceIdx(size, i, j, 0), getFaceIdx(size, i, j, 1))
uf.union(getFaceIdx(size, i, j, 2), getFaceIdx(size, i, j, 1))
uf.union(getFaceIdx(size, i, j, 2), getFaceIdx(size, i, j, 3))
}
if i < size-1 {
uf.union(getFaceIdx(size, i, j, 2), getFaceIdx(size, i+1, j, 0))
}
if j < size-1 {
uf.union(getFaceIdx(size, i, j, 1), getFaceIdx(size, i, j+1, 3))
}
}
}
count := 0
for i := 0; i < 4*size*size; i++ {
if uf.find(i) == i {
count++
}
}
return count
}
func getFaceIdx(size, i, j, k int) int {
return 4*(i*size+j) + k
}

View File

@ -0,0 +1,61 @@
package leetcode
import (
"fmt"
"testing"
)
type question959 struct {
para959
ans959
}
// para 是参数
// one 代表第一个参数
type para959 struct {
one []string
}
// ans 是答案
// one 代表第一个答案
type ans959 struct {
one int
}
func Test_Problem959(t *testing.T) {
qs := []question959{
question959{
para959{[]string{" /", "/ "}},
ans959{2},
},
question959{
para959{[]string{" /", " "}},
ans959{1},
},
question959{
para959{[]string{"\\/", "/\\"}},
ans959{4},
},
question959{
para959{[]string{"/\\", "\\/"}},
ans959{5},
},
question959{
para959{[]string{"//", "/ "}},
ans959{3},
},
}
fmt.Printf("------------------------Leetcode Problem 959------------------------\n")
for _, q := range qs {
_, p := q.ans959, q.para959
fmt.Printf("【input】:%v 【output】:%v\n", p, regionsBySlashes(p.one))
}
fmt.Printf("\n\n\n")
}