Description:
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
思路:
设置四条边的界限,每遍历完一条边,边的界限缩小1(左边的边左移一格,上边的边下移一格,以此类推。)
注意每次移动边后数组下标有可能越界,要注意判断。
设置四条边的界限,每遍历完一条边,边的界限缩小1(左边的边左移一格,上边的边下移一格,以此类推。)
注意每次移动边后数组下标有可能越界,要注意判断。
Code:
class Solution {
public:
/*
* @param matrix: a matrix of m x n elements
* @return: an integer list
*/
vector<int> spiralOrder(vector<vector<int>> matrix) {
// write your code here
vector<int> order;
if (matrix.empty())
return order;
int low_m = 0;
int high_m = matrix.size() - 1;
int low_n = 0;
int high_n = matrix[0].size() - 1;
int i;
while (high_m - low_m >= 0 && high_n - low_n >= 0) {
for (i = low_n; i < high_n + 1; i++)
order.push_back(matrix[low_m][i]);
low_m++;
for (i = low_m ; i < high_m + 1; i++)
order.push_back(matrix[i][high_n]);
high_n--;
if (high_m - low_m < 0 || high_n - low_n < 0)
break;
for (i = high_n ; i > low_n - 1; i--)
order.push_back(matrix[high_m][i]);
high_m--;
for (i = high_m ; i > low_m - 1 ; i--)
order.push_back(matrix[i][low_n]);
low_n++;
}
return order;
}
};