一维数组的初始化和 push_back 冲突
class Solution {
public:
vector<int> spiralArray(vector<vector<int>>& array) {
int startx = 0;
int starty = 0;
int i, j;
//创建一维数组
vector<int> nums(array.size()* array.size(), 0);
int offset = 1;
//二维数组的行数
int loop = array.size()/2;
while (loop--)
{
for (j = starty; j < array.size() - offset; j++)
nums.push_back(array[startx][j]);
for (i = startx; i < array.size() - offset; i++)
nums.push_back(array[i][j]);
for(;j>starty;j--)
nums.push_back(array[i][j]);
for(;i>startx;i--)
nums.push_back(array[i][j]);
offset++;
startx++;
starty++;
}
if (array.size() % 2==1)
nums.push_back(array[array.size() / 2][array.size() / 2]);
return nums;
}
};
对于
vector<int> nums(array.size() * array.size(), 0);
这里初始化了一维数组 nums,长度为 array.size() * array.size(),并将所有元素初始化为 0。
然而,你在后续代码中使用了 nums.push_back() 添加新元素,这会使得 nums 的长度远超出预期,因为之前分配的空间不会被自动覆盖。
修正方法: 不要初始化固定长度,而直接定义空的 vector。
修正后:
vector<int> nums;
解决之后发现,矩阵不一定是方阵!然后又有很多问题,看了题解才解出来。
class Solution {
public:
vector<int> spiralArray(vector<vector<int>>& array) {
if (array.size() == 0 || array[0].size() == 0)
return {};
//列数
int up = 0;
int down = array.size()-1;
//行数
int left = 0;
int right = array[0].size()-1;
//创建数组
vector<int> nums;
while (true)
{
for (int j = left; j <= right; j++)
nums.push_back(array[up][j]);
up++;
if (up > down)
break;
for (int i = up; i <= down; i++)
nums.push_back(array[i][right]);
right--;
if (left > right)
break;
for (int j = right; j >= left; j--)
nums.push_back(array[down][j]);
down--;
if (up > down)
break;
for (int i = down; i >= up; i--)
nums.push_back(array[i][left]);
left++;
if (left > right)
break;
}
return nums;
}
};