45 lines
706 B
Go
Executable File
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--
|
|
}
|
|
} |