LeetCode7-ReverseInteger
LeetCode7-ReverseInteger
题目
题目所在链接为 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 .
解题
解题思路
- 通过余数和除法获取 从尾部 获取数据的每一位,依次成将数据乘10 得到新的数据
- 判断符号, 判断是否溢出
时间复杂度: $ 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 型数据, 但是每次判断依次结果
很多数据会导致溢出 直接抛弃掉 可以节省大量的时间
整体流程如下:
如果结果会溢出, 如果是正值 则 $temp = rev*10+pop $ 则
$$ rev > \frac{INTMAX}{10} || (rev == \frac{INTMAX}{10} && pop>7) $$如果结果会溢出, 如果是负值 则 $temp = rev*10+pop $ 则
$$ rev <> \frac{INTMIN}{10} || (rev == \frac{INTMIN}{10} && pop<-8) $$其中 $ 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的更多相关文章
- LeetCode-7.reverse-integer 【翻转字符串】【数学】
PS: 第一次写文章好累啊,没想到这么短的文章写完这么累,大家给我点反馈,多给我留言啊.
- leetcode — reverse-integer
/** * Source : https://oj.leetcode.com/problems/reverse-integer/ * * Created by lverpeng on 2017/7/4 ...
- 【LeetCode7】Reverse Integer★
题目描述: 解题思路: 反转的方法很简单,重点在于判断溢出的问题,下面给出了两种方法. Java代码: 方法一: 判断溢出方法:在执行完int newResult=result*10+tail语句后, ...
- leetcode7
public class Solution { public int Reverse(int x) { ; ) { fuhao = -; } try { x = Math.Abs(x); } catc ...
- ReverseInteger
public class ReverseInteger { public static int reverse(int x) { long ret = 0; //如果是个位数,直接返回. if(x/1 ...
- Leetcode7 : Reverse Integer 整数反转问题
问题描述 Example1: x = 123, return 321 Example2: x = -123, return -321 原题链接: https://leetcode.com/proble ...
- ReverseInteger:实现int整数的反转
原文链接 Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Output: 321 ...
- leetCode:reverseInteger 反向整数 【JAVA实现】
反向整数 给定一个 32 位有符号整数,将整数中的数字进行反转,如果超出整数的最大或者最小范围返回0 更多文章查看个人博客 个人博客地址:反向整数 方法一 利用StringBuilder的revers ...
- LeetCode7:Reverse Integer
Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 click to ...
随机推荐
- IE,Google Chrome等浏览器,调试模式在控制台可以手动调用页面的方法来调试
IE,Google Chrome等浏览器,调试模式在控制台可以手动调用页面的方法来调试,这种方式也可以进断点.
- Linux yum 源配置
CentOS 7 使用 163 的 yum 源,配置步骤如下: 下载镜像源文件 http://mirrors.163.com/.help/centos.html 备份原配置文件,将下载的文件的名字改成 ...
- JS去除字符串内的空白字符方法
有时我们需要对用户的输入进行一些处理,比如用户输入的密码或者用户名我们就需要去除前后空格,下面写一个去除空白字符的方法 function trim(string = '') { return stri ...
- PTA数据结构与算法题目集(中文) 7-3
PTA数据结构与算法题目集(中文) 7-3 树的同构 给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的.例如图1给出的两棵树就是同构的,因为我们把其中一 ...
- Yum 软件仓库配置
Yum 软件仓库的作用是为了进一步简化 RPM 管理软件的难度以及自动分析 所需软件包及其依赖关系的技术. 可以把 Yum 想象成是一个硕大的软件仓库,里面保存有几乎所 有常用的工具 . 第1步:进入 ...
- C++编译/编辑器对OIer的必要功能
(没有引战的意思,如果有不同意见可以评论区发言,只是写出我目前的情况) 作为一个C++ OIer肯定是用过Dev的,因为学校推荐啊我也没有办法.都知道Dev又丑又没有代码补全,但是却是最最最适合OIe ...
- 数据科学 R语言速成
文章更新于:2020-03-07 按照惯例,需要的文件附上链接放在文首: 文件名:R-3.6.2-win.exe 文件大小:82.4M 下载链接:https://www.lanzous.com/i9c ...
- android开发对应高德地图定位服务进度一
进行android的高德地图开发首先需要进入高德地图的控制台进行注册登录.之后创建新的应用并且绑定软件得到相应的key. 这里面需要找到自己软件对应的多个SHA1.这里有发布版和调试版,以及对应的软件 ...
- python 函数--迭代器
一.迭代协议: 可以被迭代要满足要求的就叫做可迭代协议.内部实现__iter__方法. iterable:可迭代的--对应的标志. 什么叫做迭代?:可以一个一个取值,就像for循环一样取值. 字符串, ...
- 2016蓝桥杯报纸页数(C++C组)
题目: 报纸页数X星球日报和我们地球的城市早报是一样的,都是一些单独的纸张叠在一起而已.每张纸印有4版.比如,某张报纸包含的4页是:5,6,11,12,可以确定它应该是最上边的第2张报纸.我们在太空中 ...