1. 程式人生 > >【leetcode】54.(Medium) Spiral Matrix

【leetcode】54.(Medium) Spiral Matrix

解題思路:
首先計算一下上、右、下、左的邊界總共會迴圈多少次,然後依次加進結果裡面就可以了。


提交程式碼:

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; } }

執行結果:
在這裡插入圖片描述