498.diagonal-traverse.go 439 B

12345678910111213141516171819202122232425
  1. func findDiagonalOrder(matrix [][]int) (ans []int) {
  2. m := len(matrix)
  3. if m == 0 {
  4. return
  5. }
  6. n := len(matrix[0])
  7. if n == 0 {
  8. return
  9. }
  10. x, y := 0, 0
  11. dx, dy := 1, -1
  12. for i := 0; i < m*n; i++ {
  13. ans = append(ans, matrix[y][x])
  14. if ny := y + dy; (ny == -1 || ny == m) && x != n-1 {
  15. dx, dy = -dx, -dy
  16. x++
  17. } else if nx := x + dx; nx == -1 || nx == n {
  18. dx, dy = -dx, -dy
  19. y++
  20. } else {
  21. x, y = nx, ny
  22. }
  23. }
  24. return
  25. }