File tree 3 files changed +51
-0
lines changed
3 files changed +51
-0
lines changed Original file line number Diff line number Diff line change
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 ]
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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 ]
You can’t perform that action at this time.
0 commit comments