“之”字形打印矩阵
【题目】 给定一个矩阵matrix,按照“之”字形的方式打印这 个矩阵,例如:
1 2 3 4
5 6 7 8
9 10 11 12 “之”字形打印的结果为:1,2,5,9,6,3,4,7,10,11, 8,12
【要求】 额外空间复杂度为O(1)。
思路:同样是通过两点来确定范围,每次打印的斜线实际上是两个点所在直线上的所有点,再用一个bool变量来觉定从打印的方向。当从0,0开始的点走到(n-1,n-1)的点时结束
void printZigZag(vector<vector<int>>v, int tR, int tC, int dR, int dC,bool dir){
if (dir){
while (tR<=dR)
{
cout << v[tR++][tC--] << " ";
}
}
else{
while (dR >= tR){
cout << v[dR--][dC++] << " ";
}
}
}
void printMatrixZigZag(vector<vector<int>>v){
int tR = 0;
int tC = 0;
int dR = 0;
int dC = 0;
int endR = v.size() - 1;
int endC = v[0].size() - 1;
bool dir = false;
while (tR <= endR){
printZigZag(v, tR, tC, dR, dC,dir);
//用三目运算符容易出错
if (tC < endC)
tC++;
else
tR++;
if (dR < endR)
dR++;
else
dC++;
dir = !dir;
}
}