d****n 发帖数: 233 | 1 这道题直接打印总是容易出错, 用状态机就简单多了。
class Solution {
public:
enum Direct{
Right,
Down,
Left,
Up
};
void print(const vector > &matrix, int top, int bottom, int
left, int right, Direct dir, vector & output){
if (top > bottom || left > right) return;
switch(dir) {
case Right:
for(int i = left; i <= right; i++)
output.push_back(matrix[top][i]);
print(matrix, top+1, bottom, left, right, Down, output);
break;
case Down:
for(int i = top; i <= bottom; i++)
output.push_back(matrix[i][right]);
print(matrix, top, bottom, left, right-1, Left, output);
break;
case Left:
for(int i = right; i >= left; i--)
output.push_back(matrix[bottom][i]);
print(matrix, top, bottom-1, left, right, Up, output);
break;
case Up:
for(int i = bottom; i >= top; i--)
output.push_back(matrix[i][left]);
print(matrix, top, bottom, left + 1, right, Right, output);
break;
}
}
vector spiralOrder(vector > &matrix) {
vector output;
int M = matrix.size();
if (M < 1) return output;
int N = matrix[0].size();
print(matrix, 0,M-1, 0, N-1, Right, output);
return output;
}
}; | K***s 发帖数: 621 | 2 直接打也还好
有个规律,横竖两个方向每打印一次,所需要打印的数目都会减1
所以搞个loop就行
int
【在 d****n 的大作中提到】 : 这道题直接打印总是容易出错, 用状态机就简单多了。 : class Solution { : public: : enum Direct{ : Right, : Down, : Left, : Up : }; : void print(const vector > &matrix, int top, int bottom, int
| d****n 发帖数: 233 | 3 关键是直接打很容易弄错, 要不你share一下你的code?
【在 K***s 的大作中提到】 : 直接打也还好 : 有个规律,横竖两个方向每打印一次,所需要打印的数目都会减1 : 所以搞个loop就行 : : int
|
|