7.Reverse Integer(Easy)

Reverse digits of an integer.
反转一个整数的数字
Example1: x = 123, return 321
Example2: x = -123, return -321

  看似没有坑,实则不然,因为在这个题目里面,隐含的条件还有要做溢出处理,即输入一个超过Integer最大值的整数

My Solution

(Java) Version 1 Time: 43ms:

  首先想到的做法就是把整数当做个字符串进行反转,刚好前几天做过了反转字符串的操作,这里直接应用,然后就通过了,关键是用long类型来装传入的int值,就可以有效避免在运算中溢出的问题

public class Solution {
    public int reverse(int x) {
        if(x>-10&&x<10)
            return x;
        long y = x;
        long z = Math.abs(y);
        boolean isNegative = x > 0;
        String s = String.valueOf(z);
        char[] chars = s.toCharArray();
        char c;
        for (int i = s.length() - 1, j = 0; j != chars.length / 2; i--, j++) {
            c = chars[j];
            chars[j] = chars[i];
            chars[i] = c;
        }
        z = Long.parseLong(String.valueOf(chars));
        if(z>Integer.MAX_VALUE)
            return 0;
        return (int)(isNegative ? z : -1 * z);
    }
}

(Java) Version 2 Time: 41ms:

  除去字符串操作,这个解法就是典型的直接对数字进行处理,从各位开始取数,然后一位一位取到最高位,组成一个新的数,就是结果,代码显然是简短了很多,处理仍然是用long作操作数,本来我以为上一个解法会比这个直接操作整数的解法更快,不过似乎被打脸了,应该是数转字符串耗费了不少的时间,也可能是因为题目的范围仅仅是在整数的范围里,长度较短,字符串反转的优势没有显现。当然,根据leetcode的尿性,这两个解法都是属于同一个时间复杂度的,并没有明显的差距

public class Solution {
    public int reverse(int x) {
        long y;
        long z = x;
        boolean isNegative = x > 0;
        z = Math.abs(z);
        y = z % 10;
        z /= 10;
        while (z != 0) {
            y = y * 10 + z % 10;
            if (y > Integer.MAX_VALUE)
                return 0;
            z /= 10;
        }
        return (int)(isNegative ? y : -1 * y);
    }
}

  发现discuss里其他的Java解法似乎也是大同小异,并没有更快的,都是40ms左右,但是同样是直接操作整数C++却只要6ms,这…………

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,779评论 0 33
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,010评论 19 139
  • 如今,在大量的在线内容中,引起读者注意是非常困难的。尤其是现在,人们注意力在内容间切换的时间越来越短。首先要记住,...
    Robin_lian阅读 581评论 0 0
  • YOUTH--- Samuel Ullman Youth is not a time of life; it is...
    花果山猴阅读 309评论 0 0
  • Goodbye
    只是只是阅读 206评论 0 0