亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

劍指offer:把數字翻譯成字符串

發布時間:2020-08-04 23:02:05 來源:網絡 閱讀:537 作者:Jayce_SYSU 欄目:編程語言

題目要求:
給定一個數字,按照如下規則翻譯成字符串:0翻譯成“a”,1翻譯成“b”...25翻譯成“z”。一個數字有多種翻譯可能,例如12258一共有5種,分別是bccfi,bwfi,bczi,mcfi,mzi。實現一個函數,用來計算一個數字有多少種不同的翻譯方法。

# -*- coding: utf-8 -*-
# @Time         : 2019-07-10 21:13
# @Author       : Jayce Wong
# @ProjectName  : job
# @FileName     : getTranslationCount.py
# @Blog         : https://blog.51cto.com/jayce1111
# @Github       : https://github.com/SysuJayce

def getTranslationCount(number):
    """
    要將一個數字轉化成一個字符串,由于這個數字有很多位,我們最直觀的就是從頭開始,一位一位地去轉化。
    比如給定12258. 我們可以先把1翻譯成b,然后剩下2258;也可以先把12翻譯成m,然后剩下258.。。

    由此可見是一個遞歸問題,用遞歸的思路分析題目,用循環來解決問題(動態規劃)
    遞推公式為:f(i) = f(i+1) + g(i, i+1) x f(i+2)

    其中f(i)表示到下標為i的數字為止,共有多少種可能的翻譯。之所以寫成向前遞推的公式,是因為如果我
    們從前往后翻譯,會出現很多重復的子問題,比如12258=1 | 2258,其中2258=2 | 258,而12258=12 | 258,
    這樣258就重復了。
    所以我們從后往前翻譯,就可以避免這樣的重復子問題。
    """
    def helper(s):
        # 一個數字至少有一種翻譯,因此可以先設置一個全為1的數組,長度對應數字的位數加一
        counts = [1] * (len(s) + 1)
        # 對于前面的n-1位
        for i in range(len(s) - 2, -1, -1):
            # 第i位至少有和第i+1位一樣多的翻譯數
            count = counts[i + 1]
            # 如果第i位和第i+1位可以組合成一個10-25的數字,那么g(i, i+1) = 1
            # f(i) = f(i+1) + g(i, i+1) x f(i+2)
            # 由于我們設置的數組長度是位數+1,因此這里i+2不可能越界
            if 10 <= int(s[i: i + 2]) <= 25:
                count += counts[i + 2]
            counts[i] = count
        return counts[0]

    # 由于0對應a,25對應z,因此小于0的輸入是無效的
    if number < 0:
        return 0

    return helper(str(number))
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蚌埠市| 彭州市| 嘉荫县| 四会市| 太仓市| 田东县| 巩留县| 疏勒县| 房产| 惠水县| 钟山县| 栖霞市| 东乡族自治县| 鹤岗市| 汝南县| 龙山县| 沙田区| 勃利县| 连州市| 思茅市| 青龙| 罗平县| 普宁市| 北碚区| 南澳县| 兴宁市| 平顶山市| 新田县| 浙江省| 临桂县| 鸡东县| 东城区| 赫章县| 祥云县| 铁力市| 千阳县| 定日县| 正定县| 白玉县| 晋州市| 彭州市|