在不使用额外的内存空间的条件下判断一个整数是否是回文。
回文指逆序和正序完全相同。
数据范围:
进阶: 空间复杂度
,时间复杂度
提示:
负整数可以是回文吗?(比如-1)
如果你在考虑将数字转化为字符串的话,请注意一下不能使用额外空间的限制
你可以将整数翻转。但是,如果你做过题目“反转数字”,你会知道将整数翻转可能会出现溢出的情况,你怎么处理这个问题?
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param x int整型
* @return bool布尔型
*/
bool isPalindrome(int x ) {
// write code here
if(x<0)
return false;
if(x==0)
return true;
char *str=(char *)malloc(sizeof(char)*10000000);
sprintf(str,"%d",x);//将一个整数变成一个字符串
//printf("%s ",str);
int left=0;
int right=strlen(str)-1;
while(left<right){
if(str[left++]!=str[right--])
return false;
}
return true;
} 高兴,居然做出来了
思路是判断最高位和最低位是否相等,然后去掉最高位和最低位,保留中间的继续判断
bool isPalindrome(int x ) {
// write code here
if(x<0) return false;
int p=x, len=0;
while(p>10) {
len++;
p/=10;
}
printf("len:%d\n", len);
for(int i=len; i>=1; i=i-2){
int yu = x%10;
int zhishu=1;
for(int j=0; j<i; j++){
zhishu*=10;
}
int gaowei= x/zhishu;
printf("yu:%d, gaowei:%d\n", yu, gaowei);
if(yu!=gaowei) return false;
x%=zhishu;
x/=10;
}
return true;
}