題目:
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 ]
]
此題與https://blog.csdn.net/dldldl1994/article/details/102329861
思想一致
c++:
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> res(n,vector<int>(n,0));
int up = 0, down = n -1;
int left = 0, right = n -1;
int val = 1;
while(true){
for(int j = left; j <= right; ++j) res[up][j] = val++;
if(++up > down) break;
for(int i = up; i <= down; ++i) res[i][right] = val++;
if(--right < left) break;
for(int j = right; j >= left; --j) res[down][j]= val++;
if(--down < up) break;
for(int i = down; i >= up; --i) res[i][left] = val++;
if(++left > right) break;
}
return res;
}
};
java:
class Solution {
public int[][] generateMatrix(int n) {
int[][] res = new int[n][n];
int up = 0, down = n -1;
int left = 0, right = n -1;
int val = 1;
while(true){
for(int j = left; j <= right; ++j) res[up][j] = val++;
if(++up > down) break;
for(int i = up; i <= down; ++i) res[i][right] = val++;
if(--right < left) break;
for(int j = right; j >= left; --j) res[down][j]= val++;
if(--down < up) break;
for(int i = down; i >= up; --i) res[i][left] = val++;
if(++left > right) break;
}
return res;
}
}
class Solution(object):
def generateMatrix(self, n):
"""
:type n: int
:rtype: List[List[int]]
"""
res = [[0 for i in xrange(n)] for j in xrange(n)]
up = 0
down = n -1
left = 0
right = n -1
val = 1
while True:
for j in xrange(left,right+1):
res[up][j] = val
val += 1
up += 1
if up > down: break
for i in xrange(up,down+1):
res[i][right] = val
val += 1
right -= 1
if right < left: break
for j in xrange(right,left-1,-1):
res[down][j]= val
val += 1
down -= 1
if down < up: break
for i in xrange(down, up-1,-1):
res[i][left] = val
val += 1
left += 1
if left > right: break;
return res