前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【转载 leetcode算法-整数反转】

【转载 leetcode算法-整数反转】

作者头像
用户5640963
发布2020-02-24 09:49:10
3310
发布2020-02-24 09:49:10
举报
文章被收录于专栏:卯金刀GG
方法:弹出和推入数字 & 溢出前进行检查

思路

我们可以一次构建反转整数的一位数字。在这样做的时候,我们可以预先检查向原整数附加另一位数字是否会导致溢出。

算法

反转整数的方法可以与反转字符串进行类比。

我们想重复“弹出” xx 的最后一位数字,并将它“推入”到 \text{rev}rev 的后面。最后,\text{rev}rev 将与 xx 相反。

要在没有辅助堆栈 / 数组的帮助下 “弹出” 和 “推入” 数字,我们可以使用数学方法。

代码语言:javascript
复制
//pop operation:
pop = x % 10;
x /= 10;

//push operation:
temp = rev * 10 + pop;
rev = temp;

代码:

代码语言:javascript
复制
public class Zhengshufanzhuan {

    //官方解法
    static int reverse(int x){
        int rev = 0;


        System.out.println("int 的最大数:" + Integer.MAX_VALUE);
        System.out.println("int 的最小数:" + Integer.MIN_VALUE);
        while( x != 0){

            int pop = x % 10;

            x  /= 10;

            if(rev > Integer.MAX_VALUE / 10 || (rev == Integer.MAX_VALUE / 10 && pop > Integer.MAX_VALUE % 10)){
                rev = 0;
                break;
            }else if(rev < Integer.MIN_VALUE / 10 || (rev == Integer.MIN_VALUE / 10 && x < Integer.MIN_VALUE % 10)){
                rev = 0;
                break;
            }
            rev = rev * 10 + pop;

        }
        return  rev;
    }
    //强人解法
    static int reverse2(int x) {
        int ans = 0;
        while (x != 0) {
            if ((ans * 10) / 10 != ans) {
                ans = 0;
                break;
            }
            ans = ans * 10 + x % 10;
            x /= 10;
        }
        return ans;
    }
    public static void main(String[] args){
        //System.out.println(Zhengshufanzhuan.reverse(12345678));
        System.out.println(Zhengshufanzhuan.reverse2(12345678));
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法:弹出和推入数字 & 溢出前进行检查
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档