Leetcode 009:迴文數---Python

一、寫在前面

之前寫過的Leetcode筆記:點擊查看
今天給大家分享的是LeetCode 009:整數反轉,爲面試而生,期待你的加入。

二、今日題目

判斷一個整數是否是迴文數。
迴文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。

示例:

輸入: 121
輸出: true

輸入: -121
輸出: false
解釋: 從左向右讀,-121 。 從右向左讀,121- 。因此它不是一個迴文數。

輸入: 10
輸出: false
解釋: 從右向左讀,01 。因此它不是一個迴文數。

三、 分析

這個題目看着不怎麼難,思路和上一題有點像,就我的個人認知來說,這個題主要考察點在:對迴文數的認知和遍歷優化上,前者,所謂迴文數,即這個數正着讀和反着讀都是相同的,如,2019102,反過來還是2019102;後者,看重方法。

四、解題

  • 我的方法:int轉變爲str,然後遍歷字符串(Python裏int是不可迭代的,所以得轉換一下),循環比較首尾是否相等。
# -*- coding: utf-8 -*-
"""
@author = 老表
@date = 2019-08-31
@個人公衆號 : 簡說Python
"""


class Solution:
    def isPalindrome(self, x: int) -> bool:
        # int 轉變成 str
        x = str(x)
        # 字符串長度
        l = len(x)
        # 遍歷比較首尾
        for i in range(l):
            # 相等繼續往後遍歷
            if x[i] == x[l-i-1]:
                continue
            else:
                # 不相等,說明不是迴文數,返回 False
                return False
        # 順利遍歷結束,則返回True
        return True

執行結果:

修改一下,

1、對於負數,肯定不是迴文數,因爲有負號
2、不轉爲str,自己取數逆置,比較
# -*- coding: utf-8 -*-
"""
@author = 老表
@date = 2019-08-31
@個人公衆號 : 簡說Python
"""


class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x < 0:
            return False
        y = 0
        temp = x
        # 逆轉數
        while temp != 0:
            pop = temp % 10  # 取出低位
            temp = temp // 10   # 取出剩餘數
            y = y * 10 + pop   # 重新組裝,低位變成高位
        if x != y:
            return False
        # 相等返回True
        return True

  • 方法二:通過之前的學習,我們知道,一些top級的代碼都是使用了內置函數的,或者特殊語法,對於這題,我們也可以試試,畢竟迴文數的核心在於:逆置前後相等,關鍵在逆置。
    Python裏逆置字符串的方法,除了for遍歷外,最好用的方法就是切片。
str[x:y:n]

str :字符串對象
x :起始位置(可以取到)
y :末尾(結束)位置(取不到)
n :步進(隔多遠取一個數,-1表示從末尾開始取)

例如:
str = "1234"
str[1:3:1]
結果:"23"

str[0:4:2]
結果:"13"

str[::-1]
結果:"4321"
# -*- coding: utf-8 -*-
"""
@author = 老表
@date = 2019-08-31
@個人公衆號 : 簡說Python
"""


class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x < 0:
            return False
        # 轉變爲字符串,切片逆置,轉變爲整數,比較
        if x == int(str(x)[::-1]):
            return True
        return False
  • 提交結果

五、疑惑

自從上次發現Leetcode 提交後可以查看其他解決方案,我每次做完就會看看top級的解決方法,這裏分享給大家。



都用了切片來處理逆置問題,不可否認,這的確比我們自己手動處理要快很多。

六、結語

堅持就完了。

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