• [leetcode]_Reverse Integer


    经历了三道树的题后,完全崩溃中,急需一道非树图的题来挽救信心。

    题目:反转数字。input : 123 , output : 321.

    思路:直接,没什么好说的。

    自己代码:很龊,有大量的冗余信息,还申请了一个List,虽然AC了,但有很大改进空间。

    public int reverse(int x) {
            boolean negative = false;
            if(x < 0) {
                negative = true;
                x = x * (-1);
            }
            List<Integer> result = new ArrayList<Integer>();
            while( x / 10 > 0 ){
                result.add(x % 10);
                x = x / 10;
            }
            result.add(x);
            int num = 0;
            int times = 1;
            for(int i = result.size() - 1 ; i >= 0 ; i--){
                num += result.get(i) * times;
                times *= 10;
            }
            if(negative) return (-1)*num;
            else return num;
        }

    在网络上看了别人的代码,下面是精简版:(非常清晰,没有什么冗余开销,只用了两个变量)

    public int reverse(int x) {
            boolean negative = false;
            if(x < 0) {
                negative = true;
                x = x * (-1);
            }
            int temp = 0 ;
            while(x > 0){
                temp = temp * 10 + x % 10;
                x = x / 10;
            }
            if(!negative) return temp;
            else return (-1)*temp;
        }

    后面有个知识:负数%正数 等于负数。因此不用对负数单独进行符号判断,可以直接算。

    最优版:

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

    和第二个版本不同的地方在于while循环的条件由 x > 0 变为了 x != 0,这样负数也能适应该while。只使用了一个变量。五行代码。漂亮。

  • 相关阅读:
    RSS简易阅读器vb.net源代码
    [建议]有关图片地址的建议
    [音乐欣赏]wind flowers
    有个叫计算机的比我笨
    一个朋友画的建筑设计手绘图与其想到的
    [推荐]华建小翻--QQ里的一个不错的服务商
    爆强的广告
    [学习日记]重构简易RSSREADER的UML类图
    [音乐欣赏]红颜
    [音乐欣赏]花与琴的流星
  • 原文地址:https://www.cnblogs.com/glamourousGirl/p/3729230.html
Copyright © 2020-2023  润新知