task02:leetcode.7,8,9

7.整数反转

入门必做题之一:注意题目给的范围就可以

class Solution:
    def reverse(self, x: int) -> int:
        ans, digit = 0, 1                       # 分别用来存储结果和正负数情况
        if x < 0:                               # 负数的时候标记digit = -1
            x = -x
            digit = -1

        while x:                                # 将x反转
            ans = ans * 10 + (x % 10)
            x //= 10

        ans *= digit                            # 合并正负数两种情况
        return 0 if ans < 2 ** 31 * -1 or ans > 2 ** 31 - 1 else ans

        # 上面的return与下面代码等价
        # if ans < 2 ** 31 * -1 or ans > 2 ** 31 - 1:
        #     return 0
        # else:
        #     return ans

8.字符串转换整数atoi

主要是边界情况处理比较麻烦,想清楚边界后该题不难

class Solution:
    def myAtoi(self, s: str) -> int:
        s = s.strip()                   # 去除开头无用的空格
        MIN, MAX = 2 ** 31 * -1, 2 ** 31 - 1    # 有效输出的区间
        if not s:                       # 空字符串返回0
            return 0
        digit = 1                       # 记录正负号
        if s[0] == '-':                 # 正负号开始的时候记录符号并去掉首字符
            digit = -1
            s = s[1:]
        elif s[0] == '+':
            s = s[1:]

        ans = 0                         # 记录连续的数字存储在ans中
        for ch in s:
            if ch in '0123456789':
                ans = ans * 10 + int(ch)
            else:                       # 遇到非数字的字符,退出
                break
        ans = digit * ans               # 加上符号位

        if ans < MIN:                   # 判断是否满足区间范围,返回对应的值
            return MIN
        if ans > MAX:
            return MAX
        return ans

9.回文数

入门经典题目之一,不过这个负数处理有点秀,降低了难度。

class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x < 0:                       # 所有的负数均不是回文数
            return False
        temp, ans = x, 0                # temp用来做x的翻转
        while temp:                     # 反转temp
            ans = ans * 10 + (temp % 10)
            temp //= 10
        return x == ans                 # 反转后和原来相等则为回文数

你可能感兴趣的:(算法)