c++
并没有找到特别的规律,考察的是用vector 操作数组的知识。
1--首先想到暴力法:
笨办法,标记输出。
class Solution {
public:
vector<int> printmat(vector<vector<int> > matrix, int lx, int rx, int ly, int ry, vector<int> ans){
if (lx == rx) {
for(int i=ly; i<=ry; i++)
ans.push_back(matrix[lx][i]);
return ans;
}
if(ly == ry){
for(int i=lx; i<=rx; i++)
ans.push_back(matrix[i][ly]);
return ans;
}
for(int i=ly; i<=ry; i++){
ans.push_back(matrix[lx][i]);
}
for(int i=lx+1; i<=rx; i++){
ans.push_back(matrix[i][ry]);
}
for(int i=ry-1; i>=ly; i--){
ans.push_back(matrix[rx][i]);
}
for(int i=rx-1; i>=lx+1; i--){
ans.push_back(matrix[i][ly]);
}
return ans;
}
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> ans;
if(matrix.empty()) return ans;
int lx = 0, rx = matrix.size()-1;
int ly = 0, ry = matrix[0].size()-1;
while(lx<=rx && ly<=ry){
ans = printmat(matrix, lx, rx, ly, ry, ans);
lx++;
rx--;
ly++;
ry--;
}
return ans;
}
};这个是抄别人的,感觉这个思路很low,而且边界情况不太好区分。
方法2实时修改举着,太费事时,且消耗大量操作。
未调通
class Solution {
public:
void printmat(vector<vector<int> > matrix, vector<int> ans){
// 行向量
if (matrix.size() == 1) {
for(int i=0; i<matrix[0].size(); i++)
ans.push_back(matrix[0][i]);
matrix.clear();
//列向量
}else if(matrix[0].size() == 1){
for(int i=0; i<matrix.size(); i++)
ans.push_back(matrix[i][0]);
matrix.clear();
//二维矩阵
}else{
int i=0;
int j=0;
while(j < matrix[0].size()){
ans.push_back(matrix[i][j]);
j++;
}
matrix[0].clear();
i = 0;
j = matrix[0].size()-1;
while(i < matrix.size()){
ans.push_back(matrix[i][j-1]);
matrix[i].pop_back();
i++;
}
i = matrix.size()-1;
j = matrix[0].size()-1;
while(j>=0){
ans.push_back(matrix[i][j]);
j--;
}
matrix[i].clear();
i= matrix.size() -1;
j=0;
while( i>=0 ){
ans.push_back(matrix[i][j]);
matrix[i].erase(matrix[i].begin(), matrix[i].begin()+1);
i--;
}
}
}
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> ans;
if(matrix.empty()) return ans;
while(!matrix.empty()){
printmat(matrix, ans);
}
return ans;
}
};回头再调。

京公网安备 11010502036488号