提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
疑惑
为啥我的C语言执行时间那么慢,内存消耗倒是不大
提示:以下是本篇文章正文内容,下面案例可供参考
一、C普通数学解法
困扰点在于怎么判断数的大小,题目告诉x的取值,干脆就一直取每一位,放到数组中。
bool isPalindrome(int x){
if(x>=0){
int a[32]={0},i=0,j=0;
while(x>0){
a[i++]=x%10;
x=x/10;
}
for(j;j<i;j++){
if (a[j]!=a[--i])
break;
}
if(j>=i){
return true;
}
}
return false;
}
二、题解反转法(反转一半数字)
1.思路
将数字本身反转,然后将反转后的数字与原始数字进行比较,如果它们是相同的,那么这个数字就是回文。
数字有可能存在反转后溢出(超过int可定义的范围),此时考虑只反转一半,什么时候终止以reversNumber>=Number来区分判断
class Solution {
public:
bool isPalindrome(int x) {
// 特殊情况:
// 1.当 x < 0 时,x 不是回文数。
// 2.数字的最后一位是 0,只有 0 满足这一属性
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int revertedNumber = 0;
while (x > revertedNumber) {
revertedNumber = revertedNumber * 10 + x % 10;
x /= 10;
}
// 当数字长度为奇数时,通过 revertedNumber/10 去除处于中位数字
// 如输入 12321 时,得到 x = 12,revertedNumber = 123
return x == revertedNumber || x == revertedNumber / 10;
}
};
执行用时确实少了很多
总结
扩展提高将int转化字符串还没完成,后面有时间再看吧,暂时不想碰字符串