码迷,mamicode.com
首页 > 其他好文 > 详细

[leetcode]_Reverse Integer

时间:2014-05-15 14:22:31      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   c   

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

 

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

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

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

bubuko.com,布布扣
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;
    }
bubuko.com,布布扣

 

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

bubuko.com,布布扣
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;
    }
bubuko.com,布布扣

 

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

最优版:

bubuko.com,布布扣
public int reverse(int x) {
        
        int temp = 0 ;
        while(x != 0){
            temp = temp * 10 + x % 10;
            x = x / 10;
        }
        return temp;
    }
bubuko.com,布布扣

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

[leetcode]_Reverse Integer,布布扣,bubuko.com

[leetcode]_Reverse Integer

标签:style   blog   class   code   java   c   

原文地址:http://www.cnblogs.com/glamourousGirl/p/3729230.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!