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 # 反转后和原来相等则为回文数