C语言for循环超时while循环正常?回文数算法差异求解
回文数问题中for循环超时、while循环正常的原因分析
我在LeetCode上用C语言解决回文数问题时,发现for循环实现的版本触发了「time limit exceeded(超时)」错误,但while循环的版本运行正常。两种实现代码如下:
For Loop 实现
int temp, reverse = 0; for(temp = x; temp > 0; temp/10){ // x is the variable to be tested reverse = reverse*10 + temp%10; } if(reverse == temp){ return true; } return false;
While Loop 实现
int temp, reverse = 0; temp = x; // x is the variable to be tested while(temp>0){ reverse = reverse*10 + temp%10; temp = temp/10; } if(reverse == temp){ return true; } return false;
差异原因分析
核心问题出在for循环的更新表达式上:
- 你的for循环第三个表达式写的是
temp/10,这仅仅是执行了除法计算,但没有将结果赋值给temp。这就导致temp的数值自始至终不会变化,只要初始的temp > 0条件成立,循环就会无限执行下去,最终触发超时错误。 - 而while循环中,每次迭代都会执行
temp = temp/10,这个赋值操作会让temp不断被缩小,直到变为0,循环能正常终止。
另外补充一个两个版本共有的逻辑错误:循环结束后temp的值已经是0,此时判断reverse == temp只有当reverse为0时才会返回true,正确的逻辑应该是将reverse与原数x比较,或者在循环前保存temp的初始值再进行比较。不过这不是导致超时的直接原因。
内容的提问来源于stack exchange,提问作者TDivyanshu
相关产品推荐
相关产品推荐

