【Leetcode 02 09】整数反转 回文数

整数反转

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

题目分析

首先,拿到这道题之后,先审题。有符号的数字需要考虑负数的情况,所以最好先判断以下正负。每一个数字反转,可以先把每一位的数字取出来,然后再利用数学的方法构造出来反转后的整数。以一个三位数345为例,如果想要把5取出来,345/10=34 余5,python有取余数的函数(%)。之后再取4,用刚才的商34除以10取余数,取3也是类似的方法。我们发现这是一个递归的过程,一直取到商为0停止。因此可以写出来递归部分的程序:

        while(x!=0):
            temp = x % 10
            num = num *10 + temp
            x = int(a/10)

但是python的取模是根据向下取整法的,而c/c++/java是基于向零取整的。
例如:
在python中 :-53除以10=-6 …7 所以python中 -53%10=7
在c语言中,-53除以10=-5 … -3 所以c语言中 -53%10=-3
所以最好还是先取个绝对值再处理,还有也要注意一下0的情况。完整的函数如下:

class Solution:
    def reverse(self, x: int) -> int:
        num = 0
        a = abs(x)

        while(a!=0):
            temp = a % 10
            num = num *10 + temp
            a = int(a/10)

        if x > 0 and num <2147483647:
            return num
        elif x < 0 and num <= 2147483647:
            return -num
        else:
            return 0

09 回文数

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
这两道题非常的相似。所以代码就直接放啦:

class Solution:
    def isPalindrome(self, x: int) -> bool:
        num = 0
        a = abs(x)
        while (a!=0):
            temp = a % 10  
            a = a // 10
            num = num*10 + temp
        if x >= 0 and num == x:
            return True
        else:
            return False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值