You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode最长公共前缀问题:$temp_var无法接收方法返回值

解决LeetCode「最长公共前缀」PHP代码的返回值问题

问题情况

我是编程新手,在LeetCode做「最长公共前缀」题时遇到问题:测试输入strs = ["flower","flow","flight"],预期输出是"fl",但代码输出"flight"。排查发现$temp_var无法正确接收reduceOneAndCheck方法的返回值,第二次循环对比"flower"和"flow"时,$temp_var没被赋值为"flow"反而变成空值,后续被赋值为"flight"返回。

错误分析

  • 递归返回值丢失:reduceOneAndCheck方法的else分支中,递归调用$this->reduceOneAndCheck($str_tmp, $value)后没有返回该结果,导致递归的最终返回值无法传递到上层调用,方法默认返回null,这就是$temp_var变为空值的核心原因。
  • 冗余的引用传递:reduceOneAndCheck的第一个参数使用了引用&$temp_var,但逻辑中并未修改原变量,反而容易造成变量状态混淆,完全没有必要。
  • 变量未显式初始化:$temp_var初始未赋值,虽然PHP会默认设为null,但显式初始化能避免潜在的未定义变量问题。

修正后的代码

class Solution {

    /**
     * @param String[] $strs
     * @return String
     */
    function longestCommonPrefix($strs) {
        // 显式初始化临时变量
        $temp_var = null;
        
        foreach ($strs as $value) {
            if($temp_var === null || $temp_var === "") {
                $temp_var = $value; 
            }
            $temp_var = $this->reduceOneAndCheck($temp_var, $value);
            
            // 提前终止循环:公共前缀为空时无需继续对比
            if ($temp_var === "") {
                break;
            }
        }
        
        return $temp_var;
        
    }
    
    function reduceOneAndCheck(string $temp_var, string $value) {
        // 处理空字符串边界情况
        if($temp_var === "" || $value === "") {
            return "";
        }
        
        if($temp_var === $value) {
            return $temp_var;
        } else {
            $str_tmp = substr($temp_var, 0, -1);
            // 递归调用必须返回结果,确保值能传递到上层
            return $this->reduceOneAndCheck($str_tmp, $value);
        }
    }
}

修正说明

  1. 修复递归返回逻辑:在else分支的递归调用前添加return,让递归的结果能正确传递回上层调用,确保$temp_var能拿到正确的公共前缀。
  2. 移除冗余引用:将&$temp_var改为普通参数$temp_var,避免不必要的变量引用干扰。
  3. 显式初始化变量:$temp_var = null让代码逻辑更清晰,符合PHP编码规范。
  4. 添加提前终止:当$temp_var变为空字符串时,直接跳出循环,减少不必要的计算,提升代码效率。

内容的提问来源于stack exchange,提问作者briso

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:41:05