• LeetCode刷题记录_反转整数


    题目

    给定一个 32 位有符号整数,将整数中的数字进行反转。

    示例 1:

    输入: 123
    输出: 321
    

     示例 2:

    输入: -123
    输出: -321
    

    示例 3:

    输入: 120
    输出: 21
    

    注意:

    假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231,  231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。

    解法:难点在于如何判断是否溢出(前提是题目中的加粗下划线,我以为题目的意思是只能用int来解题,如果可以用long,double那题目自然简单好多,解完题目发现大家都用了long和double,我真是。。。。。)在不考虑溢出的情况下解题很简单这样就可以

    class Solution {
        public int reverse(int x) {
            int r=0;
            int temp;
            temp = x;
           
            while(temp/10!=0||temp%10!=0){
                r=r*10+temp%10;
                temp /=10; 
            }
            return r;  
        }
    }
    

     如果有溢出则需要判断溢出,不溢出的情况下,循环中的r,正数必然是递增的,负数递减的

    class Solution {
        public int reverse(int x) {
            int r=0;
            int temp;
            temp = x;
            if(x>0){
                while(temp/10!=0||temp%10!=0){
                if(r>(r=r*10+temp%10)/10) return 0;
                //正数出现递减
                temp /=10; 
            }
                return r;
            }
            else{
                while(temp/10!=0||temp%10!=0){            
                if(r<(r=r*10+temp%10)/10) return 0; 
                //负数出现递增
                temp /=10; 
            }
                return r;
            }
        }
    }
    

     看到别人的解法发现一个很好的把负数转为正数的方法,设定一个符号之int sign=1;若x<0则sign=-1;x=-1*x; 最后return -1*r;写出来更简洁。感觉自己还是蠢了,有一点一直没想明白,存不存在这种数,*10之后溢出了,但是溢出后的值比之前大?简单粗暴的用0:Integer.MAX_VALUE遍历了一下,并没有发现。

  • 相关阅读:
    通用客户端脚本
    刷一次变一次图的ASP代码
    ASP公共翻页代码
    Web中模态对话框加载后根据加载内容动态改变其大小并使其居中
    创建一个ASP通用分页类
    各大门户网站FLASH广告完全揭密
    插入记录后,获取记录的ID
    ASP实用函数库
    Sametime 8.5.1系统环境要求
    推荐:IBM Lotus Domino 8.5 服务器管理入门手册(适用初学者)
  • 原文地址:https://www.cnblogs.com/annofyf/p/9381745.html
Copyright © 2020-2023  润新知