498. 对角线遍历
对角线遍历
题目描述:
给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。
示例 1:
输入:mat = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,4,7,5,3,6,8,9]
示例 2:
输入:mat = [[1,2],[3,4]]
输出:[1,2,3,4]
提示:
m == mat.length
n == mat[i].length
1 <= m, n <= 104
1 <= m * n <= 104
-105 <= mat[i][j] <= 105
思路:
时间复杂度:O(n^2),空间复杂度O(n^2)
模拟法做,模拟对角线遍历
代码:
func findDiagonalOrder(mat [][]int) []int {
m,n := len(mat),len(mat[0])
k := 0
var res,tmp []int
for i := 0;i<n;i++{
for j:=0;j<=i && j<m;j++{
if i-j >=0 {
tmp = append(tmp, mat[j][i-j])
}
}
if k %2 == 0{
tmp = reverse(tmp)
}
res = append(res,tmp...)
k++
tmp = []int{}
}
for i:=1;i<m;i++{
for j:=0;j<=m-i-1 ;j++{
if n-j-1 >=0{
tmp = append(tmp, mat[i+j][n-j-1])
}
}
if k %2 == 0{
tmp = reverse(tmp)
}
k++
res = append(res,tmp...)
tmp = []int{}
}
return res
}
func reverse(a []int)[]int{
for i:=0;i<len(a)/2;i++{
a[i],a[len(a)-i-1] = a[len(a)-i-1], a[i]
}
return a
}
代码效率:
执行用时:80 ms, 在所有 Go 提交中击败了13.79%的用户
内存消耗:6.6 MB, 在所有 Go 提交中击败了90.18%的用户
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!