【LeetCode】反转问题

题目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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章