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よりも厄介です。要素の数が多い場合はスタックを吹き飛ばすことができます。境界条件(ベクトルで、at())関数を簡単にチェックすることはできません。最後に、VLAは標準ではなく、vectorは標準。 – PaulMcKenzie
誰も私の質問がダウン投票された理由を教えてもらえますか?それは私がstackoverflowに置いた私の最初の質問ですが、私は何かが間違っていたかどうかはわかりません。 – myyukiho