当前位置: 首页 > news >正文

Reverse Integer

 

第二道简单题,这道题主要是取余的思想,但我们平常遇到的位数较少的数字只要对个十百分别取余再拼起来就行了,这道题的话因为最大位数可以是[-231,231-1],所以就要用到循环取余。

1. Given an integer x

以下循环,直到X为0:

2. X对10取余,获得其个位数

3. X/10 获得整数部分

4. 个位数乘以10,变为新数字的第一个数

这里值得注意的是,在C++里,-123/10=-12; -123%10 = -3。我记得和Python有所区别。(待查证)

class Solution {
public:
    int reverse(int x) {
        long long res=0;
        while(x){
            res = res*10+x%10;
            x = x/10;
        }
        return (res<INT_MIN ||res>INT_MAX)? 0:res; // don't forget to check overflow!!
    }
};

 非常容易错误的一个点就是数字的范围。我原来用int来存储res是明显不对的。

2^32是4294967296。题目里用的输入data type 是int就让我有些不解了..常用的几种数据类型存储范围如下:

  • short int and int : -32,767 to 32,767. (-215 +1 , 215-1)
  • unsigned short int and unsigned int : 0 to 65,535. (0, 216-1)
  • long int : -2,147,483,647 to 2,147,483,647. (-231 +1 , 231-1)
  • unsigned long int : 0 to 4,294,967,295 (0, 232-1)

看了一下这个范围,即使是long int也没法满足我们的要求呀。所以我们要用到long long int,范围是

  • long long int: -9,223,372,036,854,775,807 to 9,223,372,036,854,775,807 .(-264,264)
  • unsigned long long int: 0 to 18,446,744,073,709,551,615

嘛,实际上远超过我们的要求了。但位数能用的也就是它了。最后用(res<INT_MIN ||res>INT_MAX)? 0:res; 来check overflow就行了。

我试了一下 res设置成long的话能够打败86.38%的人,但设置成long long的话只能打败55%的人了。这说明存储的数据类型也十分影响我们的running time的。在可行的范围内尽可能选择小的存储类型。不过话说我还是觉得这题根据题目要求应该选择long long啦,可能只是test case没有涉及到那么大的数吧。

转载于:https://www.cnblogs.com/haofeng5/p/8846221.html

相关文章:

  • W650DC_DD_CFL_Win64(刷八代CPUBios)
  • Resource 的 IsSealed 问题
  • Machine Learning 第三周
  • React Native报错undefined is not an object(evaluating ‘_reactnative.propTypes’)解决办法...
  • Vue.js 子组件的异步加载及其生命周期控制
  • BZOJ 1283 序列 费用流 网络流 线性规划
  • kafka知识体系-kafka leader选举
  • 数据概述
  • winform控件大全
  • C#如何在VS2015 2017版本中编写WPF UI界面引入第三方SVG图形
  • 设计模式体会
  • 函数参数选项的处理getopt getopt_long getopt_long_only
  • eclipse 配置多个tomcat
  • io流2
  • 图文剖析自己定义View的绘制(以自己定义滑动button为例)
  • 时间复杂度分析经典问题——最大子序列和
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 4个实用的微服务测试策略
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • CSS实用技巧
  • dva中组件的懒加载
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • JavaScript中的对象个人分享
  • magento2项目上线注意事项
  • mysql外键的使用
  • SpriteKit 技巧之添加背景图片
  • 讲清楚之javascript作用域
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 推荐一个React的管理后台框架
  • 微信小程序实战练习(仿五洲到家微信版)
  • 项目管理碎碎念系列之一:干系人管理
  • 异常机制详解
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • !$boo在php中什么意思,php前戏
  • #前后端分离# 头条发布系统
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (day6) 319. 灯泡开关
  • (k8s中)docker netty OOM问题记录
  • (windows2012共享文件夹和防火墙设置
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • *Django中的Ajax 纯js的书写样式1
  • . Flume面试题
  • .net 4.0发布后不能正常显示图片问题
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .NET是什么
  • @Resource和@Autowired的区别
  • @SentinelResource详解
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [22]. 括号生成
  • [AR Foundation] 人脸检测的流程