- λ¬Έμ : https://leetcode.com/problems/decode-ways/
- νμ΄: https://algorithm.jonghoonpark.com/2024/07/08/leetcode-91
class Solution {
public int numDecodings(String s) {
int[] dp = new int[s.length()];
if (s.charAt(0) == '0') {
return 0;
}
dp[0] = 1;
for (int i = 1; i < s.length(); i++) {
int oneDigit = Integer.parseInt(String.valueOf(s.charAt(i)));
if (oneDigit > 0) {
dp[i] = dp[i - 1];
}
int prevDigit = Integer.parseInt(String.valueOf(s.charAt(i - 1)));
if (prevDigit == 0) {
continue;
}
int twoDigit = prevDigit * 10 + oneDigit;
if (twoDigit <= 26) {
if (i > 2) {
dp[i] = dp[i] + dp[i - 2];
} else {
dp[i] = dp[i] + 1;
}
}
}
return dp[s.length() - 1];
}
}
μκ° λ³΅μ‘λλ O(n), κ³΅κ° λ³΅μ‘λλ O(n)μ΄λ€. μ΄λ°μμΌλ‘ μ΅κ·Ό λ°μ΄ν°λ§ μ¬μ¬μ© νλ κ²½μ°μλ 곡κ°λ³΅μ‘λλ₯Ό O(1) μΌλ‘λ μ€μΌ μ μμ κ²μ΄λ€. μ΅κ·Όμ λ°μ΄ν°κ° μλ μ΄μ λ°μ΄ν°λ€μ λ μ΄μ μ°Έμ‘°λμ§ μκΈ° λλ¬Έμ νμν 곡κ°λ§ λ§λ€μ΄μ 보κ΄νλ©΄ λλ€.