Files
coding-practice/legacy/498 FindDiagonalOrder/Go/main.go

45 lines
706 B
Go
Executable File

package main
import "fmt"
func findDiagonalOrder(mat [][]int) []int {
if len(mat) == 0 || len(mat[0]) == 0{
return []int{}
}
m := len(mat)
n := len(mat[0])
// maps
diagonals := make(map[int][]int)
for i:=0; i< m;i++{
for j:=0; j < n; j++{
index := i+j
diagonals[index] = append(diagonals[index], mat[i][j])
}
}
result := []int{}
for i:= 0; i< m+n-1; i++{
if i% 2 == 0{
reverse(diagonals[i])
result = append(result, diagonals[i]...)
}else{
result = append(result, diagonals[i]...)
}
}
return result
}
func reverse(slice []int){
left, right :=0, len(slice)-1
for left < right{
slice[left], slice[right] = slice[right], slice[left]
left++
right--
}
}