LeetCode反转字符串C++递归解法报addition of unsigned offset运行错误求助
错误原因
- 递归终止条件逻辑不完善:你当前仅判断
left == right,仅能覆盖数组长度为奇数的场景。当数组长度为偶数时,递归执行到left = right + 1时仍不会触发终止,会继续向下执行。 - 越界访问触发溢出错误:终止条件失效后,right会不断递减为负数,vector的下标要求为无符号类型,负数被强制转换为超大无符号整数时就会触发你看到的unsigned offset溢出错误,属于典型的数组越界访问。
- 未覆盖空输入场景:如果输入是空数组,
s.size() - 1直接得到-1,首次调用递归函数时就会访问s[-1],直接触发越界。
修复方案
仅需修改递归函数的终止条件,将left == right改为left >= right即可覆盖所有场景:
class Solution { public: void funToReverse(int left,int right,vector<char> &s){ // 修改终止条件,覆盖空数组、偶数长度、奇数长度所有场景 if(left >= right) return; char temp = s[left]; s[left] = s[right]; s[right] = temp; funToReverse(left + 1, right - 1, s); } void reverseString(vector<char>& s) { int left = 0; int right = s.size() - 1; funToReverse(left, right, s); } };
修改后的逻辑兼容所有输入场景:
- 空数组:left=0,right=-1,满足
left >= right直接返回,无越界访问 - 偶数长度数组:递归到left > right时自动终止,不会执行越界交换
- 奇数长度数组:递归到left == right时终止,和原有正确逻辑一致
内容的提问来源于stack exchange,提问作者Kanishk08
相关产品推荐
相关产品推荐

