Skip to content

Commit bd05427

Browse files
authored
Merge pull request #1300 from river20s/main
2 parents 9b6dae6 + 776f689 commit bd05427

File tree

3 files changed

+51
-0
lines changed

3 files changed

+51
-0
lines changed

decode-ways/river20s.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class Solution(object):
2+
def numDecodings(self, s):
3+
"""
4+
실제로 어떤 문자열로 바뀌는지는 중요하지 않음.
5+
유효한 디코딩 경로가 몇 가지인가를 구하는 문제.
6+
DP를 사용하여 각 자리수에 대해 가능한 경우의 수를 누적하여 계산.
7+
DP[i]는 i번째 자리까지의 경우의 수를 의미.
8+
점화식: DP[i] = DP[i-1] + DP[i-2] (i >= 2)
9+
Time complexity: O(n)
10+
Space complexity: O(n)
11+
"""
12+
# 문자열이 비어있거나 '0'으로 시작하면 디코딩 X
13+
if not s or s[0] == '0':
14+
return 0
15+
16+
n = len(s)
17+
dp = [0] * (n + 1)
18+
dp[0] = 1 # DP를 위한 기초 상태 초기화, 실제로 빈 문자열이 들어오는 것은 아님
19+
dp[1] = 1 # 첫 글자 디코딩 방법은 1가지
20+
21+
for i in range(2, n + 1):
22+
# 한 자리 수 해석 가능 여부 확인
23+
# s[i-2:i]는 i >= 2일때만 의미가 있으므로 2부터 루프 시작
24+
if s[i - 1] != '0': # '0'은 유효하지 않으므로 제외
25+
dp[i] += dp[i - 1] # 유효한 '1'~'9'라면 앞까지의 경우의 수를 계승
26+
27+
# 두 자리 수 해석 가능 여부 확인
28+
if 10 <= int(s[i -2:i]) <= 26:
29+
dp[i] += dp[i - 2] # 유효한 '10'~'26'이라면 앞까지의 경우의 수를 계승
30+
31+
return dp[n]

number-of-1-bits/river20s.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution(object):
2+
def hammingWeight(self, n):
3+
"""
4+
:type n: int
5+
:rtype: int
6+
Time complexity: O(1)
7+
Space complexity: O(1)
8+
"""
9+
count = 0
10+
for _ in range(32):
11+
count += n & 1
12+
n >>= 1
13+
return count

valid-palindrome/river20s.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import re
2+
3+
class Solution(object):
4+
def isPalindrome(self, s):
5+
s = s.lower()
6+
s = re.sub(r'[^a-z0-9]', '', s)
7+
return s == s[::-1]

0 commit comments

Comments
 (0)