博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2.整数反转
阅读量:3977 次
发布时间:2019-05-24

本文共 1945 字,大约阅读时间需要 6 分钟。

文章目录


一、题目描述

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

在这里插入图片描述

二、解题思路

主要是在数学逻辑的分析,以123为例,反转之后是321,那321中的3怎么能得到呢?是不是可以想到取余操作;123%10=3,如果按照这个思路,中间的2我们可以这样12%10=2;那12又怎么来的?通过(123-3)/10,然后321中1通过(12-2)/10的看看几个步骤是不是练习起来了,其实这种想法很难看出来,除非数学功底很好或者对数字很敏感可以直接想到这样的方法,真的要去仔细分析一下。(文字看着有点生涩)步骤总结如下:

123%10=3

12%10=2 (这个12通过(123-3)/10就得到了)

1%10=1 (同理1也是这样(12-2)/10)

是不是感觉只要拿到末尾数就可以了呢?

三、代码编写步骤

第一步:题目中说了给你一个32位的有符号的整数,确定了整数范围是属于-231~231-1整型,转换成32位二进制的最大最小值就是范围,所以第一步要先判断x属于这个范围。

第二步:因为整型数据分为负整型和正整型,所以在做转换时先把数据统一转成正整形。

第三步:要开始进行操作判断了,实现上面分析的过程,代码讲解部分详细说。

四、代码演示

class Solution {
public int reverse(int x) {
if(x==Integer.MIN_VALUE){
return 0; } int neg = x<0 ? -1 :1; x *= neg; int ret = 0; while(x>0){
int pop = x % 10; //得到余数 x = (x-pop)/10; //得到第二步中的被除数12 ret = ret*10+pop; //这个ret存储的就是反转之后的数 if((ret-pop)%10 != 0){
// return 0; } ret = ret; } return ret*neg; }}

第3行:先考虑最小整数的情况, Integer.MIN_VALUE返回整形最大值,32个比特位能存储的有符号的最大数值,用一个if判断,如果x等于最小整数,则返回0。

第6行:这里的条件表达就相当于为了将接下来计算的数据统一转化成正整数的前提操作,neg取值是当x是负整数时neg=-1,x是正整数时,neg=1.

第7行:根据第6 行neg判断后的值,如果x是负整数,那么乘以neg=-1后就是正整数,利于下面的计算。

第8行:这里定义一个整型变量ret=0。

第9行:由于第7行的条件,x都是大于0 的

第10行到17行:这里详细分析每一步的操作

第一轮:

​ 以123为例,取余操作pop= x%10 = 123%10 =3

​ x = (x-pop)/10 = (123-3)/10 = 12

​ ret = ret*10 + pop = 3 (得到反转之后的第一个数)

​ if这里返回不成立(因为0等于0,这里判断条件是对10取余不等于0才会执行)

​ ret = ret =3(存储这个反转之后的数)

第二轮:

​ x=12>0继续while循环

​ pop=x%10=12%10=2 (这里就得到反转之后的第二个数字了)

​ x = (x-pop)/10 = (12-2)/10 = 1

​ ret = ret*10 + pop = 32

​ if条件这里返回不成立

​ ret = ret =32

第三轮:

​ x=1>0继续while循环

​ pop=x%10=1%10=1

​ x = (x-pop)/10 = (1-1)/10 = 0

​ ret = ret10 + pop = 3210+1=321

​ if条件这里返回不成立

​ ret = ret =321

第18行:返回ret*neg=321

0

​ ret = ret10 + pop = 3210+1=321

​ if条件这里返回不成立

​ ret = ret =321

第18行:返回ret*neg=321

总结

这里主要是自己的理解和思路,不足之还望指教,自己通过代码的debug去一步步看会很清晰。

转载地址:http://iogki.baihongyu.com/

你可能感兴趣的文章
19-python之字符串简单介绍
查看>>
20-python之切片详细介绍
查看>>
P24-c++类继承-01详细的例子演示继承的好处
查看>>
P8-c++对象和类-01默认构造函数详解
查看>>
P1-c++函数详解-01函数的默认参数
查看>>
P3-c++函数详解-03函数模板详细介绍
查看>>
P4-c++函数详解-04函数重载,函数模板和函数模板重载,编译器选择使用哪个函数版本?
查看>>
P5-c++内存模型和名称空间-01头文件相关
查看>>
P6-c++内存模型和名称空间-02存储连续性、作用域和链接性
查看>>
P9-c++对象和类-02构造函数和析构函数总结
查看>>
P10-c++对象和类-03this指针详细介绍,详细的例子演示
查看>>
ksh 命令分隔符
查看>>
sed 精萃
查看>>
awk 精萃
查看>>
awk 注释
查看>>
GROUPING SETS、ROLLUP、CUBE
查看>>
数据类型和变量
查看>>
表连接(JOIN)
查看>>
游标(Cursor)
查看>>
复合语句(compound statement)
查看>>