在不使用额外的内存空间的条件下判断一个整数是否是回文。
回文指逆序和正序完全相同。
数据范围:
进阶: 空间复杂度 ,时间复杂度
提示:
负整数可以是回文吗?(比如-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; }