- 螺旋矩阵 II
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>>v(n,vector<int>(n,0));
int count = 1;
int k = round(float(n) / 2);
cout << k << endl;
for (int i = 0; i < k; i++)
{
int j = 0, row = 0;;
for (j = i; j < n-i; j++)
{
row = i;
v[row][j] = count;
count++;
}
for (row = i + 1; row < n - i; row++)
{
j = n - i- 1;
v[row][j] = count;
count++;
}
for (j = n - i - 2; j >= i; j--)
{
row = n - i - 1;
v[row][j] = count;
count++;
}
for (row = n - i - 2; row >= i+ 1; row--)
{
j = i;
v[row][j] = count;
count++;
}
}
return v;
}
};
- 螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int m = matrix.size();//返回数组的行大小
int n = matrix[0].size();//返回数组的列
int count = m * n;
vector<int>v;
int k1 = (n < m) ? n : m;
int k = (n < m) ? round(float(n)/ 2) : round(float(m) / 2 );
for (int i = 0; i < k; i++)
{
int row = 0, column = 0;
if (i == k - 1 && n != m && k1 == n&&n%2)
{
for (row = i; row < m - i; row++)
{
column = i;
v.push_back(matrix[row][column]);
count--;
}
}
if (count == 0)
{
break;
}
else
{
for (column = i; column < n - i; column++)
{
row = i;
v.push_back(matrix[row][column]);
count--;
}
}
if (count == 0)
{
break;
}
for (row = i + 1; row < m - i; row++)
{
column = n - 1 - i;
v.push_back(matrix[row][column]);
count--;
}
if (count == 0)
{
break;
}
for (column = n - 2 - i; column >= i; column--)
{
row = m - 1 - i;
v.push_back(matrix[row][column]);
count--;
}
if (count == 0)
{
break;
}
for (row = m - i - 2; row >= i + 1; row--)
{
column = i;
v.push_back(matrix[row][column]);
count--;
}
if (count == 0)
{
break;
}
}
return v;
}
};
剑指 Offer 29. 顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int m = matrix.size();
vector<int> ans;
if(m==0)
{
return ans;
}
int n = matrix[0].size();
if(m==0)
{
return ans;
}
int k1 = m > n ? n : m;
int k = round(float(k1) / 2);
int count = m * n;
for (int i =0 ; i < k; i++)
{
int row = 0, column = 0;
if (i == k - 1 && k1 == n && k1 % 2)
{
for (row = i; row < m - i; row++)
{
column = i;
ans.push_back(matrix[row][column]);
count--;
}
if (count == 0)
{
break;
}
}
else
{
for (column = i; column < n - i; column++)
{
row = i;
ans.push_back(matrix[row][column]);
count--;
}
if (count == 0)
{
break;
}
}
for (row = i + 1; row < m - i; row++)
{
column = n-1-i;
ans.push_back(matrix[row][column]);
count--;
}
if (count == 0)
{
break;
}
for (column = n - i - 2; column >= i; column--)
{
row = m - 1 - i;
ans.push_back(matrix[row][column]);
count--;
}
if (count == 0)
{
break;
}
for (row = m - i - 2; row >= i+ 1; row--)
{
column = i;
ans.push_back(matrix[row][column]);
count--;
}
if (count == 0)
{
break;
}
}
return ans;
}
};