LeetCode7-ReverseInteger

LeetCodeeasyOverflow

题目

题目所在链接为 LeetCode-7:ReverseInteger

题目描述

给出一个32位的有符号整数, 反向输出一个整型数字

Given a 32-bit signed integer, reverse digits of an integer.

输入输出样例

Example 1:

Input: 123

Output: 321

Example 2:

Input: -123

Output: -321

Example 3:

Input: 120

Output: 21

备注

假设我们正在处理一个只能在32位有符号整数范围内存储整数的环境:[−231, 231 − 1]。出于此问题的目的,假设当反向整数溢出时,函数返回0.

Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

例如 $2^{31} -1 = 2,147,483,647$ 如果 设计的返回的值应该是$ 7,463,847,412 $ 溢出 返回0 .

解题

解题思路

  1. 通过余数和除法获取 从尾部 获取数据的每一位,依次成将数据乘10 得到新的数据
  2. 判断符号, 判断是否溢出

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

空间复杂度: $ O(1) $

具体实现

class Solution {
public:
int reverse(int x) {
if (x == 0)
return 0;
// 输入long long 型 数据 避免溢出
long long sum = 0;
while (x!=0)
{
// 将每一位的数据 升位 加上余数
sum = sum * 10 + x % 10; // 输入数字 降位
x = x / 10; // 判断溢出
if (sum > INT_MAX || sum < INT_MIN)
return 0;
}
return int(sum);
}
};

运行结果

使用C/C++实现

运行结果 2019-03-27

Runtime: 8 ms, faster than 99.38% of C++ online submissions for Reverse Integer.

Memory Usage: 8.2 MB, less than 99.80% of C++ online submissions for Reverse Integer.

改进优化

改进思路

题目底下最好的优化在了空间上的节省, 不用设置 long long 类型的数据, 采用int 型数据, 但是每次判断依次结果

很多数据会导致溢出 直接抛弃掉 可以节省大量的时间

整体流程如下:

  1. 如果结果会溢出, 如果是正值 则 $temp = rev*10+pop $ 则

    $$ rev > \frac{INTMAX}{10} || (rev == \frac{INTMAX}{10} && pop>7) $$

  2. 如果结果会溢出, 如果是负值 则 $temp = rev*10+pop $ 则

    $$ rev <> \frac{INTMIN}{10} || (rev == \frac{INTMIN}{10} && pop<-8) $$

  3. 其中 $ pop = x%10 $

改进的实现

class Solution {
public:
int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0;
if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) return 0;
rev = rev * 10 + pop;
}
return rev;
}
};

运行结果

Runtime: 4 ms, faster than 100.00% of C++ online submissions for Reverse Integer.

Memory Usage: 8.1 MB, less than 99.80% of C++ online submissions for Reverse Integer.

LeetCode7-ReverseInteger的更多相关文章

  1. LeetCode-7.reverse-integer 【翻转字符串】【数学】

    PS: 第一次写文章好累啊,没想到这么短的文章写完这么累,大家给我点反馈,多给我留言啊.

  2. leetcode — reverse-integer

    /** * Source : https://oj.leetcode.com/problems/reverse-integer/ * * Created by lverpeng on 2017/7/4 ...

  3. 【LeetCode7】Reverse Integer★

    题目描述: 解题思路: 反转的方法很简单,重点在于判断溢出的问题,下面给出了两种方法. Java代码: 方法一: 判断溢出方法:在执行完int newResult=result*10+tail语句后, ...

  4. leetcode7

    public class Solution { public int Reverse(int x) { ; ) { fuhao = -; } try { x = Math.Abs(x); } catc ...

  5. ReverseInteger

    public class ReverseInteger { public static int reverse(int x) { long ret = 0; //如果是个位数,直接返回. if(x/1 ...

  6. Leetcode7 : Reverse Integer 整数反转问题

    问题描述 Example1: x = 123, return 321 Example2: x = -123, return -321 原题链接: https://leetcode.com/proble ...

  7. ReverseInteger:实现int整数的反转

    原文链接 Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Output: 321 ...

  8. leetCode:reverseInteger 反向整数 【JAVA实现】

    反向整数 给定一个 32 位有符号整数,将整数中的数字进行反转,如果超出整数的最大或者最小范围返回0 更多文章查看个人博客 个人博客地址:反向整数 方法一 利用StringBuilder的revers ...

  9. LeetCode7:Reverse Integer

    Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 click to ...

随机推荐

  1. ES6规范及语法基础

    var的特点 函数作用域 let的特点 没有变量提升,必须先声明.再调用 同一个作用域下不可以重复定义同一个名称 块级作用域 function fun(){ let a = 10 if(true){ ...

  2. python基础知识 目录 简介

    1.1编程语言介绍与分类 什么是编程语言? 本质:与人类语言一样.沟通 电流+一堆硬件 高电压1 低电压0 高电压1 低电压0 高电压1 低电压0 8 晶体管 010101010101 play so ...

  3. javascript 3d网页 示例 ( three.js 初探 七)

    1 完整代码下载 https://pan.baidu.com/s/1JJyVcP2KqXsd5G6eaYpgHQ 提取码 3fzt (压缩包名: 2020-4-5-demo.zip) 2 图片展示 3 ...

  4. Scheme语言实例入门--怎样写一个“新型冠状病毒感染风险检测程序”

    小学生都能用的编程语言 2020的春季中小学受疫情影响,一直还没有开学,孩子宅在家说想做一个学校要求的研究项目,我就说你做一个怎么样通过编程来学习数学的小项目吧,用最简单的计算机语言来解决小学数学问题 ...

  5. VBScript - 弹出“文件选择对话框”方法大全!

    本文记录,VBScript 中,各种打开 "文件选择对话框" 的方法. 实现方法-1 (mshta.exe): 首先,我们要实现的就是,弹出上面的这个"文件选择对话框&q ...

  6. 配置一个mariadb数据库《二》

                                                             mariadb 配置一个数据库 案例4:配置一个数据库 4.1 问题 本例要求在虚拟机 ...

  7. 项目踩坑实记 :2019年(SSM 架构)

    1.Bootstarp 相关 JS 结合 Bootstarp 初始化表格后,如果是 Ajax 请求获得返回数据,重新渲染数据到表格的话,用下面的函数. ChanInfTable 是表格的 id. 2. ...

  8. Java8 新特性 Lambda & Stream API

    目录 Lambda & Stream API 1 Lambda表达式 1.1 为什么要使用lambda表达式 1.2 Lambda表达式语法 1.3 函数式接口 1.3.1 什么是函数式接口? ...

  9. python基本知识点if、while、等等

    给予Python的相关知识点: 主要是对于基本语句的相关使用if else while for等先关的应用,以及步骤如下: 尝试编程如下:还有就是对于 import math import rando ...

  10. 家庭版记账本app开发之关于(数据库查找出数据)圆饼图的生成

    这次完成的主要的怎样从数据库中调出数据.之后通过相关的数据,生成想要的圆饼图.以方便用户更加直观的看见关于账本的基本情况. 在圆饼图生成中用到了一些外部资源 具体的import如下: import c ...