一、题目描述:
二、思路分析:分从左到右、从上到下、从右到左、从下到上四个步骤
三、代码实现:
C++实现:
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
//思路:从左到右、从上到下、从右到左、从下到上循环遍历
vector<int> res;//存储结果
int rows = matrix.size();//行数
int cols = matrix[0].size();//列数
int left = 0,right = cols-1,top = 0,bottom = rows-1;
while(left<=right && top<=bottom){
//从左到右
for(int i=left; i<=right; i++){
res.push_back(matrix[top][i]);
}
//从上到下
for(int j=top+1; j<=bottom; j++){
res.push_back(matrix[j][right]);
}
//从右到左
if(top != bottom){//if判断
for(int k=right-1; k>=left; k--){
res.push_back(matrix[bottom][k]);
}
}
//从下到上
if(left != right){//if判断
for(int t=bottom-1; t>top; t--){//是>而不是>=
res.push_back(matrix[t][left]);
}
}
left++,top++,right--,bottom--;
}
return res;
}
};
python 实现:
# -*- coding:utf-8 -*-
class Solution:
# matrix类型为二维列表,需要返回列表
def printMatrix(self, matrix):
res = []
rows = len(matrix)
cols = len(matrix[0])
left = 0
right = cols-1
top = 0
bottom = rows-1
while left<=right and top<=bottom:
#从左到右
for i in range(left,right+1):#左闭右开区间
res.append(matrix[top][i])
#从上到下
for j in range(top+1,bottom+1):
res.append(matrix[j][right])
#从右到左
if top!=bottom:
for k in range(left,right)[::-1]:#[::-1]是将列表反过来
res.append(matrix[bottom][k])
#从下到上
if left!=right:
for t in range(top+1,bottom)[::-1]:
res.append(matrix[t][left])
left += 1
right -= 1
top += 1
bottom -= 1
return res