54. Spiral Matrix
题目
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.For example,Given the following matrix:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]You should return [1,2,3,6,9,8,7,4,5].
解析
- 自己亲自写才知道很多细节问题:
- bug1:
y0==y1
写成y0=y1
赋值语句 - bug2:
for (int row = x1 - 1; row > x0;row--)
小标越界row=x1+1
- bug3: 输入为空矩阵判断
if ( matrix.empty())
后面判断row<=0||col<=0
此时已经出现问题了
class Solution_54 {public: void help(vector >& matrix,vector &res, int x0, int y0, int x1, int y1) { if (x0==x1&&y0==y1) { res.push_back(matrix[x0][y0]); }else if (x0==x1) //最后一行 { for (int i = y0; i <= y1;i++) { res.push_back(matrix[x0][i]); } }else if (y1==y0) { for (int i = x0; i <= x1;i++) { res.push_back(matrix[i][y0]); } } else { for (int col = y0; col <= y1;col++) { res.push_back(matrix[x0][col]); } for (int row = x0 + 1; row <= x1;row++) { res.push_back(matrix[row][y1]); } for (int col = y1 - 1; col >= y0;col--) { res.push_back(matrix[x1][col]); } for (int row = x1 - 1; row > x0;row--) { res.push_back(matrix[row][y0]); } } return; } vector spiralOrder(vector >& matrix) { vector res; if ( matrix.empty()) // { return vector (); //res; } int row = matrix.size(); int col = matrix[0].size(); //后面判断错误:row <= 0 || col <= 0 ,需要计算row,col调用size()出错,需要在函数开始判断 int x0 = 0, y0 = 0, x1 = row - 1, y1 = col - 1; while (x0<=x1&&y0<=y1) { help(matrix,res, x0, y0, x1, y1); x0++; y0++; x1--; y1--; } return res; }};
题目来源