1.课本简单很详细! 容器用起来和数组差不多
class Solution {
public:
//这个是要根据容器返回值来判断的!!
vector<int> printMatrix(vector<vector<int> > matrix) {
//是二维的容器 允许下标
//判断条件
vector<int> res;//一开始定义是空的
if(matrix.empty())
return res; //返回空容器即可
int rows=matrix.size();
int colums=matrix[0].size();
int start=0;
while ((2*start<rows)&&(2*start<colums)) //这个for循环是圈数 //现在这种情况传过来传过去的麻烦 放一起吧
{
int endx=colums-1-start; //每次的终止行号
int endy=rows-1-start; //每次的终止列号 //弄成实际的有好处
//一 打印从左向右 这个是必须的!
for(int i=start;i<=endx;i++)
{
int number=matrix[start][i];
res.push_back(number);
}
//二 打印从右向下 判断终止行号大于起止行号
if(start<endy)
{
for(int i=start+1;i<=endy;i++)//i代表列
{
int number=matrix[i][endx];
res.push_back(number);
}
}
//三 打印从右向左 判断终止行号大于起止行号 终止列号大于起止列号
if(start<endy&&start<endx)
{
for(int i=endx-1;i>=start;--i)//i代表行
{
int number=matrix[endy][i];
res.push_back(number);
}
}
//四 打印从下向上 判断终止行号大于起止行号 终止列号比起止列号至少大2
if(start<endx&& (endy-start>1))//至少大于等于2
{
for(int i=endy-1;i>=start+1;--i)//i代表列 //不用打到头
{
int number=matrix[i][start];
res.push_back(number);
}
}
start++;
}
return res;
}
};