leetcode中数字相关问题
时间:2021-03-18 10:03:18
收藏:0
阅读:38
- q7 整数反转
题目描述:给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [?231, 231 ? 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。
本题的意思是要将数字翻转过来。那么注意最后一句话,不允许存储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;
}
}
- q9 回文数
题目描述:给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
如果延续着第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
评论(0)