题目1
【简单】整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123 输出: 321
示例 2:
输入: -123 输出: -321
示例 3:
输入: 120 输出: 21
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
解答
方法1:算术
注意:反转后的值可能会溢出;使用 python 区摸需要考虑 负数情况
class Solution(object):
def reverse(self, x):
ans = 0
flag = 1
if x <0:
x = -x;
flag = -flag
while x != 0:
cur = x % 10
ans = ans*10 + cur
x //= 10
return ans*flag if -2**31 <ans*flag <2**31 else 0
链接:https://leetcode-cn.com/problems/reverse-integer/solution/suan-shu-javapython-by-javaniuniu/
方法2: 转String再反转
class Solution:
def reverse(self, x: int) -> int:
# 这里是把整数转换成字符串进行处理的,有点投机取巧了
str_x = str(x)
if str_x[0] == '-':
str_x = str_x[::-1]# 字符串反转
str_x = '-'+str_x[:-1]# 舍弃字符串最后一位,前面接上'-'
else:
str_x = str_x[::-1]
result = int(str_x) # 再把字符串转为有符号整数
if result > -2**31 and result < 2**31-1:
return result
else:
return 0
链接:https://leetcode-cn.com/problems/reverse-integer
题目2
【简单】反转字符串II
给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例:
输入: s = "abcdefg", k = 2 输出: "bacdfeg"
链接:https://leetcode-cn.com/problems/reverse-string-ii/
解答
class Solution:
def reverseStr(self, s: str, k: int) -> str:
a = list(s)
for i in range(0, len(a), 2*k):
a[i:i+k] = reversed(a[i:i+k])
return "".join(a)