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-- } }