美文网首页
每日一道leetcode-Resverse

每日一道leetcode-Resverse

作者: Kino_7abb | 来源:发表于2019-01-08 19:41 被阅读0次

    今天我们刷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))

    相关文章

      网友评论

          本文标题:每日一道leetcode-Resverse

          本文链接:https://www.haomeiwen.com/subject/gjwbrqtx.html