zoukankan      html  css  js  c++  java
  • 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; }这行代码算是模板了。记住就好

  • 相关阅读:
    高可靠JAVA项目
    C语言JS引擎
    星际争霸,FF反作弊对战平台
    【转】ffluos编译
    〓经典文字武侠游戏 书剑 书剑江湖自由度超高!公益服!〓
    全局解释器锁GIL
    创建多线程Thread
    线程的简述Thread
    进程池的回调函数callback
    进程池的同步与异步用法Pool
  • 原文地址:https://www.cnblogs.com/wzben/p/5008569.html
Copyright © 2011-2022 走看看