【leetcode】54.(Medium) Spiral Matrix
阿新 • • 發佈:2018-11-22
解題思路:
首先計算一下上、右、下、左的邊界總共會迴圈多少次,然後依次加進結果裡面就可以了。
提交程式碼:
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> res=new ArrayList<Integer>();
if(matrix.length==0) return res;
int cntUp=(int)Math.ceil(matrix.length/ 2.0);
int cntBottom=matrix.length/2;
int cntLeft=matrix[0].length/2;
int cntRight=(int)Math.ceil(matrix[0].length/2.0);
int pUp=0,pBottom=0,pLeft=0,pRight=0;
while(pUp<cntUp||pBottom<cntBottom||pLeft<cntLeft||pRight<cntRight) {
// up
if(pUp<cntUp) {
for(int j=pUp;j<matrix[0].length-pUp;j++)
res.add(matrix[pUp][j]);
pUp++;
}
//right
if(pRight<cntRight) {
for(int j=pRight+1;j<matrix.length-pRight-1;j++)
res.add(matrix[j][matrix[0].length -1-pRight]);
pRight++ ;
}
//bottom
if(pBottom<cntBottom) {
for(int j=matrix[0].length-1-pBottom;j>=pBottom;j--)
res.add(matrix[matrix.length-1-pBottom][j]);
pBottom++;
}
//left
if(pLeft<cntLeft) {
for(int j=matrix.length-2-pLeft;j>pLeft;j--)
res.add(matrix[j][pLeft]);
pLeft++;
}
}
return res;
}
}
執行結果: