2508/FindDiagonalOrder #2
@@ -0,0 +1,45 @@
|
|||||||
|
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--
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user