498. 對角線遍歷
給定一個含有 M x N 個元素的矩陣(M 行桃犬,N 列),請以對角線遍歷的順序返回這個矩陣中的所有元素芥炭,對角線遍歷如下圖所示晴股。
示例:
輸入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
輸出: [1,2,4,7,5,3,6,8,9]
解釋:
說明:
給定矩陣中的元素總數(shù)不會超過 100000 。
解法:
func findDiagonalOrder(matrix [][]int) []int {
if len(matrix)==0{
return []int{}
}
r:=0//row
c:=0//column
d:=1// 1為向右上遍歷踊赠,-1為向左下遍歷呵扛。也可以用r+c的奇偶來判斷方向
ret :=[]int{}
maxR:=len(matrix)-1
maxC:=len(matrix[0])-1
for l:=0;l<len(matrix)*(len(matrix[0]));l++{
ret=append(ret,matrix[r][c])
if d==1{ //右上
if c==maxC{//先判斷column是否為最大值,這樣就不用擔(dān)心row越界筐带。因為column和row同時達(dá)到最大值時今穿,循環(huán)會自動退出
r+=1
d=-1
} else if r==0 {
c+=1
d=-1
} else {
c+=1
r-=1
}
} else {//左下
if r==maxR{//這里也是,先判斷row是否最大值
c+=1
d=1
} else if c==0 {
r+=1
d=1
} else {
c-=1
r+=1
}
}
}
return ret
}
這道題有兩個難點:
- 邊界的判斷:向右上時伦籍,可能會遇到兩個邊界蓝晒,右和上腮出。左下同理。
- 方向的切換