forked from DaleStudy/leetcode-study
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGotprgmer.java
37 lines (33 loc) ยท 1.42 KB
/
Gotprgmer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// ์์ ํ์์ ํตํด ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๊ธฐ ์ํด ๋
ธ๋ ฅํ์์ง๋ง ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ์์ต๋๋ค.
// dfs๋ฅผ ํตํด ํ์ดํ๋ ค๊ณ ํ์ง๋ง O(2^N)์ ์๊ฐ๋ณต์ก๋๋ก ์ธํด ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ์์ต๋๋ค.
// ์ดํ dp๋ก ํ์ด๋ฅผ ์์ํ์๊ณ ์ด๋ ต์ง ์๊ฒ ํ์ดํ์์ต๋๋ค.
// dp[i] = dp[i-1] + dp[i-2]๋ก ํ์ดํ์์ต๋๋ค.
// ์ด๋ i๋ฒ์งธ ๋ฌธ์์ด์ 1์๋ฆฌ๋ก ์ทจ๊ธํ ์ง 2์๋ฆฌ๋ก ์ทจ๊ธํ ์ง์ ๋ฐ๋ผ ๊ฒฝ์ฐ์ ์๊ฐ ๋ฌ๋ผ์ง๋๋ค.
// 1์๋ฆฌ๋ก ์ทจ๊ธํ ๊ฒฝ์ฐ 1~9๊น์ง ๊ฐ๋ฅํ๊ณ
// 2์๋ฆฌ๋ก ์ทจ๊ธํ ๊ฒฝ์ฐ 10~26๊น์ง ๊ฐ๋ฅํฉ๋๋ค.
// ์๊ฐ๋ณต์ก๋ : O(N)
// ๊ณต๊ฐ๋ณต์ก๋ : O(N)
class SolutionGotprgmer {
public int numDecodings(String s) {
// ์์ธ ์ฒ๋ฆฌ: ๋ฌธ์์ด์ด "0"์ผ๋ก ์์ํ๊ฑฐ๋ ๋น ๋ฌธ์์ด์ด๋ฉด
if (s == null || s.length() == 0 || s.charAt(0) == '0') {
return 0;
}
int[] dp = new int[s.length()+1];
dp[0] = 1;
for(int i=0;i<s.length();i++){
int ith = s.charAt(i)-'0';
if(ith != 0){
dp[i+1] = dp[i];
}
if(i>0){
String twoDigitStr = s.substring(i-1,i+1);
int twoDigitNum = Integer.valueOf(twoDigitStr);
if(twoDigitNum>=10 && twoDigitNum <27){
dp[i+1] += dp[i-1];
}
}
}
return dp[s.length()];
}
}