1. 程式人生 > >59. Spiral Matrix II(python+cpp)

59. Spiral Matrix II(python+cpp)

題目:

Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

Example:

Input: 3 
Output:
 [  
 [ 1, 2, 3 ],  
 [ 8, 9, 4 ],  
 [ 7, 6, 5 ] 
 ]

解釋:
把1到n2的數字按照順序順時針填入陣列中,遍歷陣列的方式和54. Spiral Matrix(python+cpp)是一樣的,維持一個變數作為當前填入的值,每次填入以後+1。
python程式碼:

class Solution(object):
    def generateMatrix(self, n):
        """
        :type n: int
        :rtype: List[List[int]]
        """
        self.matrix=[[0]*n for _ in xrange(n)]
        self.num=1;
        def changeInCircle(start):
            endX=n-1-start
            endY=n-1-start
            #從左到右改變一行
for i in xrange(start,endX+1): self.matrix[start][i]=self.num; self.num+=1; #從上到下改變一列 for i in xrange(start+1,endY+1): self.matrix[i][endX]=self.num; self.num+=1; #從右到左列印一行 for
i in xrange(endX-1,start-1,-1): self.matrix[endY][i]=self.num; self.num+=1; #從下到上列印一列: for i in xrange(endY-1,start,-1): self.matrix[i][start]=self.num; self.num+=1; start=0 while n>start*2: changeInCircle(start) start+=1 return self.matrix

c++程式碼:

class Solution {
public:
    int global_n;
    int num=1;
    vector<vector<int> > matrix;
    vector<vector<int> > generateMatrix(int n) {
        global_n=n;
        matrix=vector<vector<int> >(n,vector<int>(n,0));
        int start=0;
        while(start*2<n)
        {
            changeInCircle(start,matrix);
            start++;
        }
        return matrix;
    }
    void changeInCircle(int start,vector<vector<int> >&matrix)
    {
        int endX=global_n-1-start;
        int endY=endX;
        //從左到右遍歷一行
        for (int i=start;i<=endX;i++)
        {
            matrix[start][i]=num;
            num++; 
        }
        //從上到下遍歷一列(其實不需要判斷了)      
        for(int i=start+1;i<=endY;i++)
        {
            matrix[i][endX]=num;
            num++;
        }
        //從右到左遍歷一行
    
        for(int i=endX-1;i>=start;i--)
        {
            matrix[endY][i]=num;
            num++;
        }    
        //從下到上遍歷一列
     
        for(int i=endY-1;i>start;i--)
        {
            matrix[i][start]=num;
            num++;
        }  
    }
};

總結:
由於是方陣,所以不需要太多判斷。
I中還是需要判斷的。