You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

数组元素回文校验函数palinArray返回结果异常问题排查求助

问题排查与修正方案

嘿,我帮你找到了代码里的两个关键问题,导致你的测试用例输出不符合预期:

问题1:反转数变量未每次重置

你定义的变量s(用来存储反转后的数字)只在函数开头初始化了一次为0,但在处理完第一个数组元素后,s的值会保留下来。比如处理第一个元素111后,s变成111;处理第二个元素222时,s会在111的基础上继续计算,最终得到111222,这显然和原数222不相等,所以函数直接返回0,这就是全回文数组却得到0的核心原因。

问题2:修改了原数组的元素

while(a[i]!=0)循环里,你执行了a[i] = a[i]/10,这会把当前正在处理的数组元素改成0。虽然这个问题在你的测试用例里不是直接触发错误的原因,但它会破坏输入数组的原始数据,属于不良编程习惯,后续如果有其他逻辑依赖原数组的话会引发新问题。


修正后的代码

class GfG {
    public static int palinArray(int[] a, int n) {
        // 遍历数组中的每个元素
        for(int i = 0; i < n; i++){
            int originalNum = a[i];
            int reversedNum = 0;
            // 使用临时变量处理反转,避免修改原数组
            int temp = originalNum;
            
            // 计算当前数字的反转数
            while(temp != 0){
                int remainder = temp % 10;
                reversedNum = reversedNum * 10 + remainder;
                temp = temp / 10;
            }
            
            // 检查是否为回文数,不是则直接返回0
            if(originalNum != reversedNum){
                return 0;
            }
        }
        // 所有元素都是回文数,返回1
        return 1;
    }
}

关键修改点说明

  • 每次处理新元素时重置反转数变量:把reversedNum放在循环内部初始化,确保每个元素的反转计算都从0开始。
  • 使用临时变量处理反转:用temp代替直接操作a[i],保护原数组的原始数据不被修改。
  • 优化逻辑效率:一旦发现非回文数立即返回0,不需要继续遍历剩余元素,提升代码执行效率。

现在用你的测试用例(n=5,数组元素111、222、333、444、555)测试,函数会正确返回1,符合预期。

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

火山引擎 最新活动