斜对角线"之字形"打印矩阵
题目描述
要求返回一个m x n的vector<vector
[0 1 5 6 ]
[2 4 7 10]
[3 8 9 11]
思路
思路和打印之字形字符串类似,一次打印一条线,打印具有周期性.向右上方打印时,可以总结出下一个点的变化是i--,j++;向左下方打印时,可以总结出下一个点的变化是i++,j--;其次是处理好这条线的端点处的情况,到达这条线的终点时,应该怎么办,这可以通过实例总结出规律。
代码实现
class Solution {
public:
vector<vector<int> > print_rectangle(int m,int n) {
vector<vector<int>> ret(m,vector<int>(n));
int val = 0;
int i = 0;
int j = 0;
int flag = 0;
while(0<=i && i<m && 0<=j && j<n)
{
if(flag == 0)
{
//因为这里是i减少,j增加,所以这里只需要保证
//0<=i && j<n就可以了
while(0<=i && j<n)
{
ret[i][j] = val;
val++;
i--;
j++;
}
//(i,j)返回这条线的最后一个合法位置,即终点处
i++;
j--;
(j == n-1)?i++:j++;
}
else
{
//因为这里是i增加,j减少,所以这里只需要保证
//i<m && 0<=j就可以了
while(i<m && 0<=j)
{
ret[i][j] = val;
val++;
i++;
j--;
}
//(i,j)返回这条线的最后一个合法位置,即终点处
i--;
j++;
(i == m-1)?j++:i++;
}
flag = 1-flag;
}
return ret;
}
};