Spiral Matrix
Total Accepted: 9568 Total Submissions: 47010 My Submissions
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
【解题思路】
本题代码借鉴了别人的思路。
1、设定边界值,startx,endx,starty,endy。
2、左到右,上到下,右到左,下到上,直到while条件结束。
Total Accepted: 9568 Total Submissions: 47010 My Submissions
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]You should return
[1,2,3,6,9,8,7,4,5]
.
【解题思路】
本题代码借鉴了别人的思路。
1、设定边界值,startx,endx,starty,endy。
2、左到右,上到下,右到左,下到上,直到while条件结束。
Java AC 340ms
public class Solution {
public ArrayList<Integer> spiralOrder(int[][] matrix) {
ArrayList<Integer> allList = new ArrayList<Integer>();
if (matrix == null || matrix.length == 0) {
return allList;
}
allList = printfMatrix(matrix);
return allList;
}
public ArrayList<Integer> printfMatrix(int[][] matrix) {
ArrayList<Integer> allList = new ArrayList<Integer>();
int m = matrix.length;
int n = matrix[0].length;
int startx = 0;
int starty = 0;
int endx = m - 1;
int endy = n - 1;
while (startx <= endx && starty <= endy) {
for (int i = starty; i <= endy; i++) {
allList.add(matrix[startx][i]);
}
for (int i = startx+1; i <= endx; i++) {
allList.add(matrix[i][endy]);
}
if (startx != endx) {
for (int i = endy-1; i >= starty; i--) {
allList.add(matrix[endx][i]);
}
}
if (starty != endy) {
for (int i = endx-1; i > startx; i--) {
allList.add(matrix[i][starty]);
}
}
startx++;
endx--;
starty++;
endy--;
}
return allList;
}
}
Python AC 76ms
class Solution:
# @param matrix, a list of lists of integers
# @return a list of integers
def spiralOrder(self, matrix):
list = []
if matrix is None or len(matrix) == 0:
return list
m = len(matrix)
n = len(matrix[0])
startx = 0
starty = 0
endx = m - 1
endy = n - 1
while startx <= endx and starty <= endy:
for i in range(starty, endy + 1):
list.append(matrix[startx][i])
for i in range(startx + 1, endx + 1):
list.append(matrix[i][endy])
if startx != endx:
for i in range(endy - 1, starty - 1, -1):
list.append(matrix[endx][i])
if starty != endy:
for i in range(endx - 1, startx, -1):
list.append(matrix[i][starty])
startx += 1
endx -= 1
starty += 1
endy -= 1
return list