Leetcode 91 解碼方法

2022-06-12 15:39:10 字數 1129 閱讀 1996

這道題怎麼說呢,真的很臥槽。分分鐘想把出題人打一頓,題目根本沒說明白,字串中會包含 '0' 。狀態轉移五分鐘,邊界處理兩小時。

dp 解法:

public

final

intnumdecodings(string s)

int dp = new

int[s.length() + 1];

//虛擬邊界

dp[0] = 1;

dp[1] = 1;

for (int i = 2; i < s.length() + 1; i++)

//0 解碼

dp[i] = dp[i - 2];

continue

; }

dp[i] = dp[i - 1];

if (s.charat(i - 2) != '0' && integer.valueof(s.substring(i - 2, i)) < 27) }}

return

dp[s.length()];

}

狀態轉移過程中,dp[i] 只與 dp[i-1] 和 dp[i-2] 有關。因此不必建立快取陣列,只快取前兩個結果即可。優化下空間複雜度:

public

final

intnumdecodings0(string s)

//虛擬邊界

int pre1 = 1;

int pre2 = 1;

for (int i = 2; i < s.length() + 1; i++)

//0 解碼

current =pre2;

pre1 =current;

continue

; }

current =pre1;

if (prechar != '0' && integer.valueof(s.substring(i - 2, i)) < 27)

pre2 =pre1;

pre1 =current;

}return

pre1;

}

LeetCode91 解碼方法

這題,我花了好大的功夫才通過,中途踩了很多坑,從這個15頂25踩,通過率只有10 多,就能看出這個題,雖然是乙個中等難度的題,但是並沒有那麼好做。看到題目,感覺有點像爬樓梯的那個?想到用動態規劃。第一次寫 沒有考慮0的情況,出錯,那麼就考慮吧,如果出現在頭,就返回0,出現的中間的話。不過我是從後往前...

LeetCode 91 解碼方法

一條包含字母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 或者 ...

leetcode 91 解碼方法

一條包含字母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...