问题描述
我试图解决Leetcode问题54-螺旋并卡在空向量输入中.
I tried to solve Leetcode Problem 54 - spiraland got stuck in empty vector input.
问题在于螺旋清单.输入为2d向量,输出应为螺旋方向写入的向量列表.
the question is about spiral list. input is 2d vector and output should be vector list which written by spiral direction.
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]
问题是输入为空列表时.
problem is when input is empty list.
Input: []
它产生运行时错误.
通过了另一个测试用例,除了 [] 之类的空输入.
another testcases passed except empty input like [] .
在我的Mac OSX终端中进行测试时似乎没有运行时错误,但是Leetcode说
It seems no runtime error during testing in my mac OSX terminal,but Leetcode says
'行933:字符34:运行时错误:引用绑定到类型为'struct value_type'(stl_vector.h)的空指针 '
'Line 933: Char 34: runtime error: reference binding to null pointer of type 'struct value_type' (stl_vector.h) '
这里是链接 https://leetcode.com/problems/spiral-matrix/
Here is linkhttps://leetcode.com/problems/spiral-matrix/
我还在下面附加代码...
Also I attach codes below ...
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;
}
};
推荐答案
感谢您的评论,我想出了自己解决这个问题的方法.我改变了
Thanks for comments, I figure out how to solve this one myself.I changed
if(matrix[0].size()<1
到
if(matrix.empty()) return {};
成功了.我也发现我的算法是错误的,并将其修复.
and it worked.Also I found my algorithm was wrong and fixed it.
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;
}
};
这篇关于行933:字符34:运行时错误:引用绑定到类型为'struct value_type'(stl_vector.h)的空指针-Leet Code Spiral的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!