题目
给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。
示例
输入:mat = [[1,2,3],[4,5,6],[7,8,9]]
 输出:[1,2,4,7,5,3,6,8,9]
 
解析
本题目主要考察的就是模拟法,首先可以计算得出,对角线的个数为m+n-1,在此基础上对于对角线进行遍历(从0开始),则第偶数条为从左下到右上,第奇数条为从右上到左下,根据奇数偶数来确定走什么遍历逻辑。
 在遍历的过程中,由于边界值并不固定,每次处理的时候需要判断起点的横纵坐标值:
func findDiagonalOrder(mat [][]int) (ans []int) {
	m := len(mat)
	n := len(mat[0])
	var x, y int
	for i := 0; i < m+n-1; i++ { // 对角线的个数
		if i%2 == 0 {
			// 偶数,从左下到右上
			if i < m {
				x, y = i, 0
			} else {
				x, y = m-1, i-m+1
			}
			for x >= 0 && y < n {
				ans = append(ans, mat[x][y])
				x--
				y++
			}
		} else {
			// 奇数,从右上到左下
			if i < n {
				x, y = 0, i
			} else {
				x, y = i-n+1, n-1
			}
			for x < m && y >= 0 {
				ans = append(ans, mat[x][y])
				x++
				y--
			}
		}
	}
	return
}





![[Java基础揉碎]QQ聊天项目](https://img-blog.csdnimg.cn/direct/b96fc92baa6d433ca1776081d96a2e1a.png)













