leetcode中数字相关问题

时间:2021-03-18 10:03:18   收藏:0   阅读:38

本题的意思是要将数字翻转过来。那么注意最后一句话,不允许存储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

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!