每日一道leetcode-Resverse

2019-01-08  本文已影响0人  Kino_7abb

今天我们刷leetcode第二道整数反转

题目大意就是给定一个int整数如123 ,然后反转,以321数输出,我们直接贴代代码吧!

1.这是一种利用StringBuiler来做,这时应该扩展一下StringBuilder和StringBuffer区别

StringBuilder和StringBuffer一样都是操作可变的字符串,同时自带append()进行拼接,同时也会有reverse()方法进行反转字符串。
区别:StringBuffer加了同步锁synchronized,线程安全,而StringBuilder线程不安全

public static int reverse1(int x){
        StringBuilder res = new StringBuilder();
        String str = String.valueOf(x);
        res.append(str);
        String rev = res.reverse().toString();
        return Integer.parseInt(rev);
    }

2.利用数学来模拟栈

对于数学中int x如:123,进栈T可以用x = x *10 + T,弹栈可以用pop = x % 10 (pop为弹出来的元素)
剩下的元素 x = x/10 (弹栈后的数字)
考虑int范围。整体思路就是逐个将x弹出,弹出的严肃再压入rev中

public static int reverse2(int x){
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;//弹栈
            x /= 10; //弹栈后元素
            if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
            if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
            rev = rev * 10 + pop;//将弹栈后的元素*10压栈
        }
        return rev;

    }

时间复杂度O(log(x))

上一篇下一篇

猜你喜欢

热点阅读