输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
顺着走,即向右->向下->向左->向上,一共要走(长*宽)步。遇到边界就改变方向,当向上碰到顶的时候,四个边界都缩小。思路简单,一个循环即可!
C++ clang++3.9
class Solution { public: vector<int> printMatrix(vector<vector<int> > matrix) { vector<int> ret; if(matrix.empty())return ret; int x,y,cnt=matrix[0].size()*matrix.size(); int rEdge=matrix[0].size()-1,dEdge=matrix.size()-1,lEdge=0,uEdge=0; for(x=0,y=0;cnt>0;cnt--){ ret.push_back(matrix[x][y]); //go right if(x==uEdge){if(y<rEdge)y++; else if(y==rEdge){x++;} continue;} //go down if(y==rEdge){if(x<dEdge)x++; else if(x==dEdge){y--;} continue;} //go left if(x==dEdge){if(y>lEdge)y--; else if(y==lEdge){x--;} continue;} //go up if(y==lEdge){if(x>uEdge+1)x--; else if( x==uEdge+1){y++;lEdge++;uEdge++;rEdge--;dEdge--;} continue;} } return ret; } };运行时间:3ms 占用内存:472k