我刚刚完成了关于LeetCode的一个问题,看看这行:int visited[nums.size()] = {0};
,显然这是错误的,因为你不能静态地初始化一个数组而不指定它的大小,但不知怎的,它在LeetCode上工作,我甚至提交了它。任何人都可以解释这里发生了什么?LeetCode会忽略C++中的某些语义错误吗?
class Solution {
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<vector<int>> result;
result.clear();
vector<int> v;
v.clear();
sort(nums.begin(), nums.end());
int visited[nums.size()] = {0};
helper(result, v, visited, nums);
return result;
}
void helper(vector<vector<int>> &result, vector<int> &v, int visited[], vector<int>& nums) {
if (v.size() == nums.size()) {
result.push_back(v);
return;
}
for (int i = 0; i < nums.size(); i++) {
if (visited[i] == 1) {
continue;
}
if (i > 0 && nums[i] == nums[i - 1] && visited[i - 1] == 0) {
continue;
}
visited[i] = 1;
v.push_back(nums[i]);
helper(result, v, visited, nums);
v.pop_back();
visited[i] = 0;
}
}
};
忘掉变长数组(不是标准的),而是使用'std :: vector'。 VLA比他们的价值更麻烦,IMO。如果元素数量很大,他们可以吹出堆栈,但不容易检查边界条件(使用vector,你有'at()')函数,最后,VLA不是标准的,而vector是标准。 – PaulMcKenzie
任何人都可以告诉我为什么我的问题得到了投票?这是我把第一个问题放在了stackoverflow上,我不确定我是否做错了什么。 – myyukiho