leetcode 54. 螺旋矩阵
生活随笔
收集整理的這篇文章主要介紹了
leetcode 54. 螺旋矩阵
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
難度:中等
頻次:114
題目:給你一個 m 行 n 列的矩陣 matrix ,請按照 順時針螺旋順序 ,返回矩陣中的所有元素。
解題思路:按要求模擬遍歷(重點在構造xy的坐標上)
注意:
- 需要定義四個方向的走向 0:右 1:下 2:左 3:上
- 根據上面的四個方向定義每次走向xy的變化 int[][] step={{0,1},{1,0},{0,-1},{-1,0}};
- ArrayList的元素個數要用size()
- 遍歷過的要標記 Integer.MAX_VALUE;
- 要記得判斷是否走出了邊界或者走過了已經走過的元素,如果是,要按順序變換方向
代碼
class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> res=new ArrayList<>();int row=matrix.length;int col=matrix[0].length;//定義四個方向 // 0:右 1:下 2:左 3:上//二維數組。matrix[x][y] x代表的第幾行 y代表的第幾列int[][] step={{0,1},{1,0},{0,-1},{-1,0}};//標記變更方向的值int direction=0;//起始位置為00int x=0,y=0;//如果res的大小還沒到矩陣的元素個數,繼續(xù)循環(huán)while(res.size()<row*col){res.add(matrix[x][y]);//如果已經走過,用integer的最大值標記matrix[x][y]=Integer.MAX_VALUE; int xnext=x+step[direction%4][0];int ynext=y+step[direction%4][1];//判斷下一步要走過的元素是否超除矩陣的邊界并且是否已經走過了if(xnext<0||xnext>=row||ynext<0||ynext>=col||matrix[xnext][ynext]==Integer.MAX_VALUE){//走到盡頭或者走過了就得變更方向direction++;xnext=x+step[direction%4][0];ynext=y+step[direction%4][1];} x=xnext;y=ynext; }return res;} }總結
以上是生活随笔為你收集整理的leetcode 54. 螺旋矩阵的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode 83. 删除排序链表中
- 下一篇: leetcode 1143. 最长公共子