首页 > 其他 > 详细

leetcode中数字相关问题

时间:2021-03-18 10:03:18      阅读:36      评论:0      收藏:0      [点我收藏+]
  • 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;
    }

leetcode中数字相关问题

原文:https://www.cnblogs.com/dong-qing/p/14553402.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!