1. 程式人生 > >【LeetCode】91. 解碼方法 結題報告 (C++)

【LeetCode】91. 解碼方法 結題報告 (C++)

題目描述:

一條包含字母 A-Z 的訊息通過以下方式進行了編碼:

'A' -> 1
'B' -> 2
...
'Z' -> 26
給定一個只包含數字的非空字串,請計算解碼方法的總數。

示例 1:

輸入: "12"
輸出: 2
解釋: 它可以解碼為 "AB"(1 2)或者 "L"(12)。
示例 2:

輸入: "226"
輸出: 3
解釋: 它可以解碼為 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。
 

解題方案:

動態規劃的題目。。所有動態規劃的題目關鍵在於找到遞推公式,就像數列一樣,找到通項公式。找到之後就非常好解決了。

class Solution {
public:
    int numDecodings(string s) {
        int num = s.length();
        if (!num) return 0;
        vector<int> code(num + 1, 0);
        code[0] = 1;
        for (int i = 1; i <= num; i++) {
            if (s[i - 1] == '0')
                code[i - 1] = 0;
            if (s[i - 2] == '1' || s[i - 2] == '2' && s[i - 1] <= '6')
                code[i] = code[i - 1] + code[i - 2];
            else
                code[i] = code[i - 1];
        }
        return code[num];
    }
};

相關推薦

LeetCode91. 解碼方法 報告 (C++)

題目描述: 一條包含字母 A-Z 的訊息通過以下方式進行了編碼: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 給定一個只包含數字的非空字串,請計算解碼方法的總數。 示例 1: 輸入: "12" 輸出: 2 解釋: 它可以解碼為

LeetCode162. 尋找峰值 報告 (C++)

原題地址:https://leetcode-cn.com/problems/find-peak-element/description/ 題目描述: 峰值元素是指其值大於左右相鄰值的元素。 給定一個輸入陣列 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素並返回其索引

LeetCode97. 交錯字串 報告 (C++)

原題地址:https://leetcode-cn.com/problems/interleaving-string/description/ 題目描述: 給定三個字串 s1, s2, s3, 驗證 s3 是否是由 s1 和 s2 交錯組成的。 示例 1: 輸入: s1 = "aabc

LeetCode228. 彙總區間 報告 (C++)

原題地址:https://leetcode-cn.com/problems/summary-ranges/submissions/ 題目描述: 給定一個無重複元素的有序整數陣列,返回陣列區間範圍的彙總。 示例 1: 輸入: [0,1,2,4,5,7] 輸出: ["0->2","

LeetCode306. 累加數 報告 (C++)

原題地址:https://leetcode-cn.com/problems/additive-number/ 題目描述: 累加數是一個字串,組成它的數字可以形成累加序列。 一個有效的累加序列必須至少包含 3 個數。除了最開始的兩個數以外,字串中的其他數都等於它之前兩個數相加的和。 給

LeetCode7. 反轉整數 報告 (C++)

題目描述:給定一個 32 位有符號整數,將整數中的數字進行反轉。示例 1:輸入: 123 輸出: 321  示例 2:輸入: -123 輸出: -321 示例 3:輸入: 120 輸出: 21 注意:假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231,  2

LeetCode223. 矩形面積 報告 (C++)

題目描述: 在二維平面上計算出兩個由直線構成的矩形重疊後形成的總面積。 每個矩形由其左下頂點和右上頂點座標表示,如圖所示。 Rectangle Area 示例: 輸入: -3, 0, 3, 4, 0, -1, 9, 2 輸出: 45 說明: 假設矩形面積不會超出

LeetCode210. 課程表 II 報告 (C++)

題目描述: 現在你總共有 n 門課需要選,記為 0 到 n-1。 在選修某些課程之前需要一些先修課程。 例如,想要學習課程 0 ,你需要先完成課程 1 ,我們用一個匹配來表示他們: [0,1] 給定課程總量以及它們的先決條件,返回你為了學完所有課程所安排的學習順序。

LeetCode213. 打家劫舍 II 報告 (C++)

題目描述: 你是一個專業的小偷,計劃偷竊沿街的房屋,每間房內都藏有一定的現金。這個地方所有的房屋都圍成一圈,這意味著第一個房屋和最後一個房屋是緊挨著的。同時,相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。 給定一個代表每個房

LeetCode179. 最大數 報告 (C++)

題目描述: 給定一組非負整數,重新排列它們的順序使之組成一個最大的整數。 示例 1: 輸入: [10,2] 輸出: 210 示例 2: 輸入: [3,30,34,5,9] 輸出: 9534330 說明: 輸出結果可能非常大,所以你需要返回一個字串而不是整數。

LeetCode54. 螺旋矩陣 報告 (C++)

題目描述: 給定一個包含 m x n 個元素的矩陣(m 行, n 列),請按照順時針螺旋順序,返回矩陣中的所有元素。 示例 1: 輸入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 輸出: [1,2,3,6,9,8,7,

LeetCode55. 跳躍遊戲 報告 (C++)

題目描述: 給定一個非負整數陣列,你最初位於陣列的第一個位置。 陣列中的每個元素代表你在該位置可以跳躍的最大長度。 判斷你是否能夠到達最後一個位置。 示例 1: 輸入: [2,3,1,1,4] 輸出: true 解釋: 從位置 0 到 1 跳 1 步, 然後跳

LeetCode62. 不同路徑 報告 (C++)

題目描述:   一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記為“Start” )。 機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為“Finish”)。 問總共有多少條不同的路徑? 例如,上圖是一個7 x 3

LeetCode39. 組合總和 報告 (C++)

題目描述: 給定一個無重複元素的陣列 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。 candidates 中的數字可以無限制重複被選取。 說明: 所有數字(包括 target)都是

LeetCode154. 尋找旋轉排序陣列中的最小值 II 報告 (C++)

原題地址:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/description/ 題目描述: 假設按照升序排序的陣列在預先未知的某個點上進行了旋轉。 ( 例如,陣列 [0,1,2,4,5,

LeetCode153. 尋找旋轉排序陣列中的最小值 報告 (C++)

原題地址:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array/description/ 題目描述: 假設按照升序排序的陣列在預先未知的某個點上進行了旋轉。 ( 例如,陣列 [0,1,2,4,5,6,7

LeetCode152. 乘積最大子序列 報告 (C++)

原題地址:https://leetcode-cn.com/problems/maximum-product-subarray/description/ 題目描述: 給定一個整數陣列 nums ,找出一個序列中乘積最大的連續子序列(該序列至少包含一個數)。 示例 1: 輸入: [2,3

LeetCode166. 分數到小數 報告 (C++)

原題地址:https://leetcode-cn.com/problems/fraction-to-recurring-decimal/description/ 題目描述: 給定兩個整數,分別表示分數的分子 numerator 和分母 denominator,以字串形式返回小數。 如果小

LeetCode165. 比較版本號 報告 (C++)

原題地址:https://leetcode-cn.com/problems/compare-version-numbers/description/ 題目描述: 比較兩個版本號 version1 和 version2。 如果 version1 > version2 返回 1,如果 ve

LeetCode164. 最大間距 報告 (C++)

原題地址:https://leetcode-cn.com/problems/maximum-gap/description/ 題目描述: 給定一個無序的陣列,找出陣列在排序之後,相鄰元素之間最大的差值。 如果陣列元素個數小於 2,則返回 0。 示例 1: 輸入: [3,6,9,1