You need to enable JavaScript to run this app. LeetCode反转字符串C++递归解法报addition of unsigned offset运行错误求助
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 13:36:02