在复习 Leetcode 问题时,我想找到填充为 0 的子数组。 我做了一个递归函数来完成任务,但它抛出了一个错误。
class Solution {
public:
void helper(vector<int>& nums,int i,long long &sum){
// Base Case
if(i>=nums.size()) return;
if(nums[i-1]==0 && nums[i]!=0) return;
// Recursive Case
if(nums[i]!=0) helper(nums,i+1,sum);
else{
helper(nums,i+1,sum);
sum+=1;
}
}
long long zeroFilledSubarray(vector<int>& nums) {
long long sum = 0;
helper(nums,0,sum);
return sum;
}
};
Line 1034: Char 34: runtime error: addition of unsigned offset to 0x603000000070 overflowed to 0x60300000006c (stl_vector.h)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h:1043:34
vector::operator[]
取一个无符号整数。当 i
为 0 时,i-1
为 -1
,当转换为无符号整数时将换行到一个非常大的值。因此,当nums[i-1]
为 0 时,i
越界。