版权声明:欢迎交流,本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_42513339/article/details/89048448
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
思路:说实话,想了好久,打印路径很明确,就是:向右——向下——向左——向上,依次循环,但是这里需要注意的是下标位置,每次经过一次循环,写入的位置就会+1或者减1,这个需要用变量记录。
还有一点就是需要判断循环停止的条件和是否只剩一行和一列的条件,因为只剩下一行一列时,向左和向上停止输入。
上面的思路有了,代码写起来会好点。
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
int n = matrix.size();//行数
int m = matrix[0].size();//列数
vector<int>my;
if(matrix.size() == 0)
return my;
int left = 0, top=0, right = m-1, buttom = n-1;
while(left<=right && top<=buttom)
{
//向右
for(int i = left; i<=right; i++)
my.push_back(matrix[top][i]);
//向下
for(int i = top+1; i<=buttom; i++)
my.push_back(matrix[i][right]);
//向左(如果顶部等于底部,那么就是一行,不向左)
for(int i = right-1; top != buttom && i>=left;i-- )
my.push_back(matrix[buttom][i]);
//向上(如果左部等于右,那么就是一列,不向上)
for(int i = buttom-1;left != right&& i>=top+1;i--)
my.push_back(matrix[i][left]);
left++;right--;top++;buttom--;
}
return my;
}
};