[#498] feat(FindDiagonalOrder): add golang solution
This commit is contained in:
@@ -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