Leetcode——简单题

第7题 整数反转
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。

复习python知识点:
1.str[arg1:arg2:args3]

arg1,代表起始位置,包含当前下标的元素
arg2,代表结束为止,不包含当前下标的元素
arg3,代表步长,-1 为反转
x_str = x_str[:0:-1] 的意思就是:从最后一位开始,到第 0 个元素结束,但不包括第 0 个元素,也就是负号

2.abs(x) 函数返回数字x的绝对值。

3.取整除(//)
9//2 -->> 4
-9//2 -->> -5

4.位运算符(>>,<<)
(<<) 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。

(>>) 右移动运算符:把">>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数

a = 60 # 60 = 0011 1100
a << 2 ==240 # 240 = 1111 0000
a >> 2 ==15 # 15 = 0000 1111

5.条件表达式
<操作1> if <条件> else <操作2>
首先判断条件,如果为True,就执行操作1,否则执行操作22

python3
题解来自leetcode大佬解答0.0
解题1:

def reverse(self, x: int) -> int:
        INT_MIN, INT_MAX = -2**31, 2**31 - 1
        rev = 0
        while x != 0:
            # INT_MIN 也是一个负数,不能写成 rev < INT_MIN // 10
            if rev < INT_MIN // 10 + 1 or rev > INT_MAX // 10:
                return 0
            digit = x % 10
            # Python3 的取模运算在 x 为负数时也会返回 [0, 9) 以内的结果,因此这里需要进行特殊判断
            if x < 0 and digit > 0:
                digit -= 10
            # 同理,Python3 的整数除法在 x 为负数时会向下(更小的负数)取整,因此不能写成 x //= 10
            x = (x - digit) // 10
            rev = rev * 10 + digit
        
        return rev

解题2:

def reverse_better(
        self, 
        x: int) -> int:
       
        
        y, res = abs(x), 0
        # 则其数值范围为 [−2^31,  2^31 − 1]
        boundry = (1<<31) -1 if x>0 else 1<<31
        while y != 0:
            res = res*10 +y%10
            if res > boundry :
                return 0
            y //=10
        return res if x >0 else -res

解题3:

 def reverse_force(self, x: int) -> int:
        if -10 < x < 10:
            return x
        str_x = str(x)
        if str_x[0] != "-":
            str_x = str_x[::-1]
            x = int(str_x)
        else:
            str_x = str_x[:0:-1]
            x = int(str_x)
            x = -x
        return x if -2147483648 < x < 2147483647 else 0

第9题 回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。

题解1:转化为字符串

class Solution:
    def isPalindrome(self, x: int) -> bool:
        str_x = str(x)
        if str_x == str_x[::-1]:
            return True 
        else:
             return False
题解2:

在这里插入图片描述
在x<=rev_x 时,代表已经翻转了一半位数了

class Solution:
def isPalindrome(self, x: int) -> bool:

    if (x < 0 or (x%10==0 and x !=0)):#x为负数或者最后一位是0的都不可能是回文数
        return False
    rev_x = 0
    while(x > rev_x):#判断是否翻转了一半位数
        rev_x = rev_x * 10 + x % 10
        x/=10

    return x == rev_x or x == (rev_x / 10) #当x的位数是奇数时,需要去掉末尾数字比较
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值