LeetCode题目笔记--7.整数反转

题目描述

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目解读及思路

  反转题整数,这种题目我记得应该在刚学编程的作业里出现过,但当时没有具体要求,不想这里有具体的要求。

思路

  整个思路很简单,从后往前遍历这个整数,用一个变量res记录结果,初始为0每次循环中用res乘以10加上最低位,直到所有位上的数都遍历完。

  从后往前遍历可以用两种方法来实现,一是每次循环中,用%10得到最低位,然后将输入整数除以10,适合C/C++,Java;二是将输入整数看作一个整数字符串,从后往前以下标来遍历,适合字符串操作比较方便的语言,如python,Java,C++;

  当然,如果使用python实现的话,可以不用在循环内部每次判断是否溢出,在全部计算完再判断也可,(至于越界过后的继续运算开销和每次计算都判断越界的开销谁大,我不清楚,可以弄很多数据来测一测)。而C/C++或Java则需要注意,要在循环内更新res前判断是否溢出。

可能的坑!

  这里的坑都是语言方面的问题,对语言不是非常熟悉的话可能会遇到。
  若是用第一种方法来实现,且用python来写的话,需要注意一点就是如果输入整数是负数的话,不能对10进行取余而是需要对-10取余,至于为什么,这就涉及到python底层取余%运算的实现逻辑了,感兴趣的朋友可以自己试试,查阅资料了解了解。还有就是除以10的运算,也不能直接用“/”运算符,这样的计算结果会是小数,应该使用”//“运算符
  所以,如果用python的话,就得判断两种情况分别对10和-10取余,当然也可以另辟蹊径,在循环开始前将负数取反,或者其他方法。

C语言代码

int reverse(int x){
   
    int t, res;
    res = 0;
    int INT_max = INT_MAX / 10;
    int INT_min = INT_MIN / 10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值