Skip to content

Commit 460e31e

Browse files
authored
Create design-phone-directory.py
1 parent 5808862 commit 460e31e

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

Python/design-phone-directory.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# init: Time: O(n), Space: O(n)
2+
# get: Time: O(1), Space: O(1)
3+
# check: Time: O(1), Space: O(1)
4+
# release: Time: O(1), Space: O(1)
5+
6+
class PhoneDirectory(object):
7+
8+
def __init__(self, maxNumbers):
9+
"""
10+
Initialize your data structure here
11+
@param maxNumbers - The maximum numbers that can be stored in the phone directory.
12+
:type maxNumbers: int
13+
"""
14+
self.__curr = 0
15+
self.__numbers = range(maxNumbers)
16+
self.__used = [False] * maxNumbers
17+
18+
19+
def get(self):
20+
"""
21+
Provide a number which is not assigned to anyone.
22+
@return - Return an available number. Return -1 if none is available.
23+
:rtype: int
24+
"""
25+
if self.__curr == len(self.__numbers):
26+
return -1
27+
number = self.__numbers[self.__curr]
28+
self.__curr += 1
29+
self.__used[number] = True
30+
return number
31+
32+
33+
def check(self, number):
34+
"""
35+
Check if a number is available or not.
36+
:type number: int
37+
:rtype: bool
38+
"""
39+
return 0 <= number < len(self.__numbers) and \
40+
not self.__used[number]
41+
42+
43+
def release(self, number):
44+
"""
45+
Recycle or release a number.
46+
:type number: int
47+
:rtype: void
48+
"""
49+
if not 0 <= number < len(self.__numbers) or \
50+
not self.__used[number]:
51+
return
52+
self.__used[number] = False
53+
self.__curr -= 1
54+
self.__numbers[self.__curr] = number
55+
56+
57+
# Your PhoneDirectory object will be instantiated and called as such:
58+
# obj = PhoneDirectory(maxNumbers)
59+
# param_1 = obj.get()
60+
# param_2 = obj.check(number)
61+
# obj.release(number)

0 commit comments

Comments
 (0)