add new solutions

This commit is contained in:
kanna5 2025-12-24 13:06:12 +09:00
parent f960020cb4
commit 14cd11f1c7
Signed by: kkyy
GPG key ID: 06332F3965E9B0CF
4 changed files with 155 additions and 0 deletions

View file

@ -0,0 +1,37 @@
package q199
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func rightSideView(root *TreeNode) []int {
ret := []int{}
type qElem struct {
height int
node *TreeNode
}
queue := []qElem{{0, root}}
var last *qElem
for ; len(queue) > 0; queue = queue[1:] {
cur := &queue[0]
if cur.node == nil {
continue
}
if last != nil && last.height < cur.height {
ret = append(ret, last.node.Val)
}
last = cur
queue = append(queue, qElem{cur.height + 1, cur.node.Left}, qElem{cur.height + 1, cur.node.Right})
}
if last != nil {
ret = append(ret, last.node.Val)
}
return ret
}
var _ = rightSideView

View file

@ -0,0 +1,31 @@
package q200
const (
VISITED byte = '.'
LAND byte = '1'
)
func traverse(grid [][]byte, x, y int) int {
if x < 0 || y < 0 || x >= len(grid[0]) || y >= len(grid) || grid[y][x] != LAND {
return 0
}
grid[y][x] = VISITED
traverse(grid, x+1, y)
traverse(grid, x-1, y)
traverse(grid, x, y+1)
traverse(grid, x, y-1)
return 1
}
func numIslands(grid [][]byte) int {
count := 0
for y := range grid {
for x := range grid[y] {
count += traverse(grid, x, y)
}
}
return count
}
var _ = numIslands

View file

@ -0,0 +1,37 @@
package q530
import "math"
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func getMinimumDifference(root *TreeNode) int {
minDiff := math.MaxInt
var last *int
var check = func(num int) {
if last == nil {
last = &num
return
}
minDiff = min(minDiff, num-*last)
*last = num
}
var traverse func(node *TreeNode)
traverse = func(node *TreeNode) {
if node == nil {
return
}
traverse(node.Left)
check(node.Val)
traverse(node.Right)
}
traverse(root)
return minDiff
}
var _ = getMinimumDifference

View file

@ -0,0 +1,50 @@
package q909
func coord(n, num int) (x, y int) {
num -= 1
row := num / n
y = n - row - 1
x = num % n
if row%2 == 1 {
x = n - 1 - x
}
return
}
func snakesAndLadders(board [][]int) int {
n, sqN := len(board), len(board)*len(board)
leastRolls := make([]int, sqN)
if len(leastRolls) == 1 {
return 0
}
queue := make([]int, 0, sqN)
queue = append(queue, 1)
for ; len(queue) > 0; queue = queue[1:] {
cur := queue[0]
for dist := 1; dist <= 6 && cur+dist <= sqN; dist++ {
next := cur + dist
x, y := coord(n, next)
if board[y][x] != -1 {
next = board[y][x]
}
rolls := leastRolls[cur-1] + 1
if (next > 1 && leastRolls[next-1] == 0) || rolls < leastRolls[next-1] {
leastRolls[next-1] = rolls
if next == sqN {
return rolls
}
queue = append(queue, next)
}
}
}
l := leastRolls[sqN-1]
if l == 0 {
return -1
}
return 0
}
var _ = snakesAndLadders