【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)

 

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