Leetcode刷题——简单题7 整数反转

Leetcode刷题——简单题7 整数反转

本文章记录自己的刷题代码和其中的误区

大家好!本人新手小白,尝试刷LeetCode来增加自己的思维和算法能力,代码和自己的收获可能比较浅显,欢迎各位大佬指点一二,我们一起进步。

LeetCode 第七题 整数反转 题目如下:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321

示例 2:

输入: -2147483412
输出: -2143847412

示例 3:

输入: 1534236469
输出: 0

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

题目来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

以下是我的代码:

int reverse(int x){
double result=0;  //因为在逆转过程中可能会使数值溢出,所以选择范围更大的double型
for(int i=0;x!=0;i++) 
{
    result =(result + (x%10))*10;//注意我这里其实最后一次多做了一次乘10运算。取余的方式来取最后一位数。
     x=x/10; 
   
}
//判断结果范围,因为前面多做了一次乘10运算,所以这里除去。
if(result/10<=pow(-2,31)||result/10>=pow(2,31)-1)result=0;
return (int)(result/10);
}

做题思路分析:
1、首先要进行整数的倒置,我们就要从最后一位一位一位的取然后运算,这样就可以确定取余运算可以满足。
2、原数在取余后要进行去掉取余的数,可以用整数除法不保留小数的特性来实现。
3、循环判断条件可以利用整除到最后为0来作为判断条件。
4、因为运算中可能会超出int类型的范围,所以可以用double类型来定义结果变量,最后输出时再强制转换为int型。

做题过程中踩的坑:
1、第一个就是c语言中是不存在类似于2^31这样的运算的,乘方运算使用函数pow()来实现。
2、循环中这个result算式因为每次相加完都会乘10,如果不乘10运算,第二次循环会出错,也就是最后一位直接加倒数第二位。当然你也可以在循环外进行第一次运算,这样循环内可以不用相加后再乘10。
3、注意判断是否溢出时一定要将多乘的10除去后再判断。

以上就是本次刷题的代码与经历分享了,欢迎大家提问或者提出建议,我会好好改进的!

你可能感兴趣的:(个人刷题记录)