zoukankan      html  css  js  c++  java
  • 算法9 leetcode7. Reverse Integer 整数反转


    这个题因为java的指数运算搞错了卡了很久。。无语。。
    a^b是java的异或位运算,指数运算是Math.pow(a,b)
    位异或:第一个操作数的的第n位于第二个操作数的第n位 相反,那么结果的第n为也为1,否则为0

    题目

    -》链接《-

    给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
    如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ,就返回 0。
    假设环境不允许存储 64 位整数(有符号或无符号)。
     
    示例 1:

    输入:x = 123
    输出:321
    

    示例 2:

    输入:x = -123
    输出:-321
    

    示例 3:

    输入:x = 120
    输出:21
    

    示例 4:

    输入:x = 0
    输出:0
    

    提示:
    -2^31 <= x <= 2^31 - 1

    思路

    1开始我想把整数转换成数组,然后从最后一位向前取,添加到新数组中,然后把新数组转换回来。
    2但是换来换去太麻烦了,想到最后一位就是取10的余数,然后每次取完踢掉最后一位;最后把判断条件加上就行了
    3利用对数来判断数字长度、÷10取整剃末位、末位在乘相应位数累加就可以得到翻转的数了(判断超出32位在累加过程中就可以判断)

    代码

    我的

    class Solution {
        public int reverse(int x) {
            int k=0;
            int tm=x;
            int m=0;
            double log=Math.ceil(Math.log10(x));//几位数
            if(x<0){
                x=-x;
                log=Math.ceil(Math.log10(x));//几位数
                for(int i=1;i<=log;i++){
                    m=x%(10);//取末位
                    x=(int)Math.floor(x/10);//踢末位
                    if (k>=2147483647) {//判断超出32位
                        k=0;
                        break;
                    }
                    else k+=m*Math.pow(10,((int)(log-i)));
                }
    
            }
            else{
                for(int i=1;i<=log;i++) {
                    m=x%(10);//取末位
                    x=(int)Math.floor(x/10);//踢末位
                    if (k>=2147483647) {
                        k=0;
                        break;
                    }
                    else k+=m*Math.pow(10,((int)(log-i)));
                }
            }
            if(x==1) k=1;//对数特殊
            if (tm<0)         k=-k;//添加负号
            return k;
        }
    }
    

    热评的

    链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnx13t/?discussion=ukHfZx

    public int reverse(int x) {
            int res = 0;
            while (x != 0) {
                int t = x % 10;
                int newRes = res * 10 + t;
                //如果数字溢出,直接返回0
                if ((newRes - t) / 10 != res)
                    return 0;
                res = newRes;
                x = x / 10;
            }
            return res;
        }
    
    
    
  • 相关阅读:
    dos
    admin package
    ant 调用系统环境变量
    idea6+tomcat5.5开发web程序
    VFloppy
    ant中classpath
    Velocity用户手册
    ant中 Tomcat的任务调用(包括deploy,undeploy,load,start,stop等)
    [转]aidl高级应用篇
    Android NDK开发环境安装(OK版)
  • 原文地址:https://www.cnblogs.com/impw/p/15489329.html
Copyright © 2011-2022 走看看