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; } };
回头再调。