数组元素回文校验函数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




