本题的意思是要将数字翻转过来。那么注意最后一句话,不允许存储64位整数,意味着不允许使用double类型。32位的有符号的整数类型的范围为-2147483648到2147483647,反转后的结果是完全有可能大于这个结果的。那么怎么反转呢?不断取余即可。 为了不超出范围,我们还需要提前判断。
class Solution {
public int reverse(int x) {
//res保存结果
int res=0;
while(x!=0){
int temp=x%10;
//如果当前res大于214748364,那么没必要继续下去,必定超出范围,等于的话,还需要判断下一位是否大于7
if(res>214748364||(res==214748364&&temp>7)){
return 0;
}
//如果当前res小于-214748364,那么没必要继续下去,必定超出范围,等于的话,还需要判断下一位是否小于-8
if(res<-214748364||(res==-214748364&&temp<-8)){
return 0;
}
res=res*10+temp;
x=x/10;
}
return res;
}
}
如果延续着第7题的思路,那么这个题就很好解决,我们只需要判断反转后的是否等于原来的数。那么负数就被我们排除在外了。
class Solution {
public boolean isPalindrome(int x) {
//这里没对整数范围作出限制,可以使用double类型
double res=0;
double temp=0;
int num=x;
//x<0,必定不是
if(x<0){
return false;
}
//注意这里的循环条件
while(num!=0){
temp=num%10;
res=res*10+temp;
num=num/10;
}
return res==x;
}
原文:https://www.cnblogs.com/dong-qing/p/14553402.html