Skip to content

Commit 9c6d651

Browse files
committed
feat: Add Solution to Reverse Bits #234
- ๋ฃฉ์—… ํ…Œ์ด๋ธ” ์‚ฌ์šฉํ•˜์—ฌ follow up ์งˆ๋ฌธ ๋‹ต์•ˆ ์ž‘์„ฑํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. - ๊ธฐ๋ณธ์ ์ธ ๋น„ํŠธ ์—ฐ์‚ฐ์ž ์‚ฌ์šฉํ•ด์„œ ์ˆœํšŒํ•˜๋ฉฐ ๋’ค์ง‘๋Š” ๋กœ์ง์„ ๊ธฐ๋ณธ์œผ๋กœ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.
1 parent 9eaa936 commit 9c6d651

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

โ€Žreverse-bits/river20s.pyโ€Ž

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
class Solution:
2+
# -- follow up
3+
# If this function is called many times,
4+
# how would you optimize it?
5+
# - ํด๋ž˜์Šค ๋ณ€์ˆ˜๋กœ lookup table ๋งŒ๋“ค์–ด
6+
# - 8bits ๋‹จ์œ„๋กœ ๋ฏธ๋ฆฌ ๋น„ํŠธ ๋’ค์ง‘์€ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด๋‘๋Š” ๋ฐฉ๋ฒ•
7+
# _lookup_table_8bit = [0] * 256
8+
# for i in range(256):
9+
# val = i
10+
# rev_val = 0
11+
# for _ in range(8): # 8๋น„ํŠธ ๋’ค์ง‘๊ธฐ
12+
# rev_val = (rev_val << 1) | (val & 1)
13+
# val >>= 1
14+
# _lookup_table_8bit[i] = rev_val
15+
# def __init__(self):
16+
# pass
17+
18+
def reverseBits(self, n: int) -> int:
19+
"""
20+
Time Complexity: O(1)
21+
Space Complexity: O(1)
22+
- ํ•ญ์ƒ 32๋ฒˆ ์—ฐ์‚ฐํ•˜๋ฏ€๋กœ O(1),
23+
- ํ•จ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœ๋˜๋ฉด ๋ˆ„์ ๋˜์–ด ์„ฑ๋Šฅ ์˜ํ–ฅ ์ค„ ์ˆ˜๋„ ์žˆ์Œ
24+
-> reverseBits_lookupTable() ์‚ฌ์šฉ
25+
"""
26+
reversed_n = 0 # ๋’ค์ง‘์€ ๋น„ํŠธ ์ €์žฅ
27+
num_bits = 32
28+
29+
for i in range(num_bits):
30+
reversed_n <<= 1
31+
32+
if (n & 1) == 1:
33+
reversed_n |= 1
34+
35+
n >>= 1
36+
37+
return reversed_n
38+
39+
def reverseBits_lookupTable(self, n: int) -> int:
40+
"""
41+
Time Complexity: O(1)
42+
Space Complexity: O(1)
43+
- ๋ฃฉ์—… ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์‹œ ๊ณต๊ฐ„ ํ•„์š”
44+
- ํ•˜์ง€๋งŒ ์ตœ์ดˆ ํ•œ ๋ฒˆ๋งŒ ํ•„์š”ํ•˜๋ฏ€๋กœ
45+
- ํ˜ธ์ถœ ๋ˆ„์ ๋˜๋ฉด ์—ฐ์‚ฐ๋Ÿ‰์€ ๋” ์ ์Œ
46+
"""
47+
b0 = (n >> 0) & 0xFF
48+
b1 = (n >> 8) & 0xFF
49+
b2 = (n >> 16) & 0xFF
50+
b3 = (n >> 24) & 0xFF
51+
52+
rev_b0 = self._lookup_table_8bit[b0]
53+
rev_b1 = self._lookup_table_8bit[b1]
54+
rev_b2 = self._lookup_table_8bit[b2]
55+
rev_b3 = self._lookup_table_8bit[b3]
56+
57+
result = (rev_b0 << 24) | (rev_b1 << 16) | (rev_b2 << 8) | rev_b3
58+
59+
return result

0 commit comments

Comments
ย (0)