日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

力扣--91. 解码方法

發(fā)布時間:2024/4/11 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 力扣--91. 解码方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

力扣–91. 解碼方法

文章目錄

  • 力扣--91. 解碼方法
    • 一、題目描述
    • 二、解題思路
    • 三、代碼

一、題目描述

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

'A' -> 1 'B' -> 2 ... 'Z' -> 26

給定一個只包含數(shù)字的非空字符串,請計算解碼方法的總數(shù)。

  • 示例 1:
輸入: "12" 輸出: 2 解釋: 它可以解碼為 "AB"1 2)或者 "L"12)。
  • 示例 2:
輸入: "226" 輸出: 3 解釋: 它可以解碼為 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6)

二、解題思路

  • 首先要根據(jù)當前的字符是否為 0 進行判斷
  • s 為字符串 s, f(i) 代表 到 s[i] 一共有多少種解碼方式
  • if s[i] == '0'
  • if s[i-1] == '1' || s[i-1] =='2' --> f(i) == f(i-2)

也就是說最后兩位只能合并解碼為 10 或者 20, 例如 1212120 那么此時解的數(shù)量與 12121 相同(只是解中增加了一個20的對應(yīng)字母, 解總數(shù)量未增加)

  • else --> return 0

字符串非法, 也就是 0 只能出現(xiàn)在 1 或者 2 的后面, 其它情況都是無解的如: 1212130, 30 無法對應(yīng)任何字符,直接return 0

  • if s[i] != '0'
  • if s[i-1] == '1' || (s[i-1] == '2' && s[i] >= '1' && s[i] <= '6') -->f(i) == f(i - 1) + f(i - 2)

也就是最后兩位在 10~26 之間如 1212121, 可以翻譯成 12121 + 21, 或者 121212 + 1

  • else --> f(i) == f(i - 1)

也就是最后兩位不在 10~26 之間如 1212132 那只能翻譯成 121213 + 2 代碼

三、代碼

class Solution { public:int numDecodings(string s) {if(s[0] == '0')return 0;// 存儲的是 cache[i + 1] 是 s[i] 的解碼數(shù)量, 之所以是 //cache[i + 1] , 是為了防止開始循環(huán)時 f(i-2) 出現(xiàn)訪問越界vector<int> cache(s.size() + 1, 1); for(int i = 1; i < s.size(); i++){if(s[i] == '0'){if(s[i-1] == '1' || s[i-1] == '2')cache[i + 1] = cache[i - 1];elsereturn 0; // 非法字符串, 無解}else{// 也就是到 i 位置的最后兩位數(shù)字為為 [10, 26] //可以和并轉(zhuǎn)換為一個字母if (s[i-1] == '1' || (s[i-1] == '2' && s[i] >= '1' && s[i] <= '6')) cache[i + 1] = cache[i - 1] + cache[i];elsecache[i + 1] = cache[i];}}return cache[s.size()];} };

總結(jié)

以上是生活随笔為你收集整理的力扣--91. 解码方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。