c++ - 第 933 行:字符 34:运行时错误:引用绑定到类型为“struct value_type”(stl_vector.h)的空指针 - leet 代码螺旋
问题描述
我试图解决 Leetcode 问题 54 - 螺旋并陷入空向量输入。
问题是关于螺旋列表。输入为二维向量,输出为螺旋方向的向量列表。
Input:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
Output: [1,2,3,4,8,12,11,10,9,5,6,7]
问题是当输入为空列表时。
Input: []
它会产生运行时错误。
除了像[]这样的空输入之外,另一个测试用例通过了。
在我的 mac OSX 终端测试期间似乎没有运行时错误,但 Leetcode 说
'第 933 行:字符 34:运行时错误:引用绑定到类型为 'struct value_type' (stl_vector.h) 的空指针'
这是链接 https://leetcode.com/problems/spiral-matrix/
另外我在下面附上代码...
class Solution {
public:
vector<int> answer;
int left = 0, right = 0;
vector<int> spiralOrder(vector<vector<int>>& matrix) {
if(matrix[0].size()<1) return {};
vector<vector<int>> flag(matrix.size(),vector<int>(matrix[0].size(),0));
while(1){
flag[left][right] =1;
answer.push_back(matrix[left][right]);
if(right+1<matrix[0].size() && flag[left][right+1] == 0){
++right;
continue;
}
else if(left+1<matrix.size() && flag[left+1][right] == 0 ){
++left;
continue;
}
else if(right-1>=0 && flag[left][right-1]==0){
--right;
continue;
}
else if(left-1>=0 && flag[left-1][right]==0){
--left;
continue;
}
else break;
}
return answer;
}
};
解决方案
感谢您的评论,我自己想出了如何解决这个问题。我变了
if(matrix[0].size()<1
至
if(matrix.empty()) return {};
它奏效了。我还发现我的算法是错误的并修复了它。
using namespace std;
enum class Direction{
RIGHT,
DOWN,
LEFT,
UP
};
class Solution {
public:
Direction direc;
vector<int> answer;
int left = 0, right = 0;
vector<int> spiralOrder(vector<vector<int>>& matrix) {
Direction direc = Direction::RIGHT;
if(matrix.empty()) return {};
vector<vector<int>> flag(matrix.size(),vector<int>(matrix[0].size(),0));
while(1){
flag[left][right] =1;
answer.push_back(matrix[left][right]);
switch(direc){
case Direction::RIGHT:
if(right+1<matrix[0].size() && flag[left][right+1] == 0){
++right;
continue;
}
else if(left+1<matrix.size() && flag[left+1][right] == 0 ){
++left;
direc = Direction::DOWN;
continue;
}
else break;
case Direction::DOWN:
if(left+1<matrix.size() && flag[left+1][right] == 0 ){
++left;
continue;
}
else if(right-1>=0 && flag[left][right-1]==0){
--right;
direc = Direction::LEFT;
continue;
}
else break;
case Direction::LEFT:
if(right-1>=0 && flag[left][right-1]==0){
--right;
continue;
}
else if(left-1>=0 && flag[left-1][right]==0){
--left;
direc = Direction::UP;
continue;
}
else break;
case Direction::UP:
if(left-1>=0 && flag[left-1][right]==0){
--left;
continue;
}
else if(right+1<matrix[0].size() && flag[left][right+1] == 0){
++right;
direc = Direction::RIGHT;
continue;
}
else break;
}
break;
} // switch-case
return answer;
}
};
推荐阅读
- autodesk-forge - 是否有基于 Forge 视图过滤 Revit 元素的选项?
- stm32 - STM32:将 USART 与字符匹配 ISR 和 DMA 缓冲区一起使用
- r - Rmarkdown中的插入符号doparallel:使用render()时缺少详细信息
- excel - Excel VBA - 在某些条件下删除行
- laravel - Laravel:在关闭时翻译验证消息
- php - 如何在php中搜索和读取excel文件
- c# - 是否有像 C++ 中那样带有分隔符的 C# 原始字符串?
- python - Python:编解码器和 utf-8 全局错误处理
- jquery-select2 - 如何在 select2 中有选项组时使用 Ajax 插入选项?
- javascript - 删除鼠标点击并为简单的 Javascript 添加边框