LeetCode 59. 螺旋矩陣 II(C、C++、python)
阿新 • • 發佈:2018-12-16
給定一個正整數 n,生成一個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的正方形矩陣。
示例:
輸入: 3 輸出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
C
/** * Return an array of arrays. * Note: The returned array must be malloced, assume caller calls free(). */ int** generateMatrix(int n) { int su=n*n; int** res=(int**)malloc(sizeof(int*)*n); for(int i=0;i<n;i++) { res[i]=(int*)malloc(sizeof(int)*n); } int count=(n+1)/2; int k=0; int cc=1; while(k<count && cc<=su) { for(int i=k;i<n-k;i++) { res[k][i]=cc; cc++; } for(int i=k+1;i<n-1-k;i++) { res[i][n-1-k]=cc; cc++; } if(k!=n-1-k) { for(int i=k;i<n-k;i++) { res[n-1-k][n-1-i]=cc; cc++; } for(int i=k+1;i<n-1-k;i++) { res[n-1-i][k]=cc; cc++; } } k++; } return res; }
C++
class Solution { public: vector<vector<int>> generateMatrix(int n) { int su=n*n; vector<vector<int>> res(n); for(int i=0;i<n;i++) { res[i]=vector<int>(n,0); } int count=(n+1)/2; int k=0; int cc=1; while(k<count && cc<=su) { for(int i=k;i<n-k;i++) { res[k][i]=cc; cc++; } for(int i=k+1;i<n-1-k;i++) { res[i][n-1-k]=cc; cc++; } if(k!=n-1-k) { for(int i=k;i<n-k;i++) { res[n-1-k][n-1-i]=cc; cc++; } for(int i=k+1;i<n-1-k;i++) { res[n-1-i][k]=cc; cc++; } } k++; } return res; } };
python
class Solution: def generateMatrix(self, n): """ :type n: int :rtype: List[List[int]] """ su=n**2 res=[[0 for i in range(n)] for j in range(n)] count=(n+1)//2 cc=1 k=0 while k<count and cc<=su: for i in range(k,n-k): res[k][i]=cc cc+=1 for i in range(k+1,n-1-k): res[i][n-1-k]=cc cc+=1 if k!=n-1-k: for i in range(k,n-k): res[n-1-k][n-1-i]=cc cc+=1 for i in range(k+1,n-1-k): res[n-1-i][k]=cc cc+=1 k+=1 return res