• LeetCode题解 #7 Reverse Integer


    上一次做完一个中等题觉得还挺简单,做一下简单题看看。

    题目大意:给定一个整型(即int),将它的数位反过来,如321变为123,-321变为-123.

    做了很久,因为简单题耗时的地方在于恶心!!

    最后才看见溢出的时候应该返回0!!

    一点都不难,特别是对于java。

    我的思路:

    1、将读入的int型包装成Integer,然后在转换成String。(看看前面有没有+-号)

    2、将String 倒置,再转换为long。(一定要是long,否则无法判断溢出)

    3、如果没溢出,再将long转换为int。

    以上都用了java自带的类,是很简单,但是效率低下。大概是在中上的水平。(无法理解比这个方法更低效率的代码是怎么写的-_-|||)

    以下是我改进一下的正确做法:

    class Solution {

    public: int reverse(int x) {

    // 先分离出x的数值部分和符号部分

    int y = abs(x), z = x == y ? 1 : -1;

    // 将y反向放于一个long中,这样可以避免越界

    long tmp = 0; while (y) { tmp = tmp * 10 + y % 10; y /= 10; }

    // 判断是否越界

    if (z*tmp > INT_MAX || z*tmp < INT_MIN) return 0;

    // 否则返回翻转后的值

    return z*tmp;

    }

    };

    总结一下:

     1、碰到要判断int是否溢出的地方,肯定要用到long的,用long比较是否溢出。

     2、要从另一个数字一个个的构造另一个数字,long tmp = 0; while (y) { tmp = tmp * 10 + y % 10; y /= 10; }这行代码算是模板了。记住就好

  • 相关阅读:
    Leetcode Binary Tree Level Order Traversal
    Leetcode Symmetric Tree
    Leetcode Same Tree
    Leetcode Unique Paths
    Leetcode Populating Next Right Pointers in Each Node
    Leetcode Maximum Depth of Binary Tree
    Leetcode Minimum Path Sum
    Leetcode Merge Two Sorted Lists
    Leetcode Climbing Stairs
    Leetcode Triangle
  • 原文地址:https://www.cnblogs.com/wzben/p/5008569.html
Copyright © 2020-2023  润新知