提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
The simplified version:
Given a
n
×
n
n \times n
n×n matrix, output its elements in spiral and chronological order.
#include
#include
using namespace std;
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> res;
int start_x = 0, start_y = 0;
int offset = 1;
int n = matrix.size();
int i, j;
for (int k = 0; k < n / 2; k++) {
for (j = start_y; j < n - offset; j++) {
res.push_back(matrix[start_x][j]);
}
for (i = start_x; i < n - offset; i++) {
res.push_back(matrix[i][j]);
}
for (; j > start_y; j--) {
res.push_back(matrix[i][j]);
}
for (; i > start_x; i--) {
res.push_back(matrix[i][j]);
}
start_x = start_x + 1;
start_y = start_y + 1;
offset++;
}
if (n % 2) {
res.push_back(matrix[n/2][n/2]);
}
return res;
}
};
int main()
{
Solution s;
vector<vector<int>> matrix = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
vector<int> res = s.spiralOrder(matrix);
for (int i = 0; i < res.size(); i++) {
cout << res[i] << " ";
}
cout << endl;
return 0;
}
#include
#include
using namespace std;
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> res;
int m = matrix.size();
int n = matrix[0].size();
int start_x = 0, start_y = 0;
int offset = 1;
int i = 0, j = 0;
int layers = m < n ? m : n;
layers = layers / 2;
for (int k = 0; k < layers; k++) {
for (j = start_y; j < n - offset; j++) {
res.push_back(matrix[start_x][j]);
}
for (i = start_x; i < m - offset; i++) {
res.push_back(matrix[i][j]);
}
for (; j > start_y; j--) {
res.push_back(matrix[i][j]);
}
for (; i > start_x; i--) {
res.push_back(matrix[i][j]);
}
start_x++;
start_y++;
offset++;
}
if ((m <= n) && (m % 2 == 1)) {
for (int k = 0; k < (n - 2*layers); k++) {
res.push_back(matrix[start_x][start_y + k]);
}
} else if ((n < m) && (n % 2 == 1)) {
for (int k = 0; k < (m - 2*layers); k++) {
res.push_back(matrix[start_x + k][start_y]);
}
}
return res;
}
};
int main() {
vector<vector<int>> matrix = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};
Solution s;
vector<int> res = s.spiralOrder(matrix);
for (int i = 0; i < res.size(); i++) {
cout << res[i] << " ";
}
cout << endl;
return 0;
}
know your variables and use them correctly.