498. 对角线遍历
生活随笔
收集整理的這篇文章主要介紹了
498. 对角线遍历
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
498. 對角線遍歷
給定一個含有 M x N 個元素的矩陣(M 行,N 列),請以對角線遍歷的順序返回這個矩陣中的所有元素,對角線遍歷如下圖所示。
示例:
輸入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
輸出: [1,2,4,7,5,3,6,8,9]
解釋:
說明:
給定矩陣中的元素總數不會超過 100000 。
解題思路
對于如下矩陣,我們以矩陣上邊界和右邊界的點作為起點開始遍歷,我們統一以左下方為方向進行遍歷
[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ] ]但是題目中顯然是存在左下方遍歷和右上方遍歷交替進行的,但是問題在于他們的起點難以確定,所以我們統一以左下方為基準,后面再對元素進行翻轉
代碼
class Solution {public int[] findDiagonalOrder(int[][] mat) {int n=mat.length,m=mat[0].length;int[] res = new int[n * m];int p=0;boolean pos=false;for (int i=0;i<m;i++){int x=0,y=i,l=p;while (x>=0&&x<n&&y>=0&&y<m){ res[p++]=mat[x][y];x++;y--;} int r=p-1;if(!pos){while (l<r){int t=res[l];res[l]=res[r];res[r]=t;l++;r--;}}pos=!pos;}for (int i=1;i<n;i++){int x=i,y=m-1,l=p;while (x>=0&&x<n&&y>=0&&y<m){res[p++]=mat[x][y];x++;y--;}int r=p-1;if(!pos){while (l<r){int t=res[l];res[l]=res[r];res[r]=t;l++;r--;}}pos=!pos;}return res;} }總結
以上是生活随笔為你收集整理的498. 对角线遍历的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 孕妇梦到家里发水了是什么意思
- 下一篇: 梦到黑猫有什么预兆