iterator_for_combination.py (1600B)
| # 1286. Iterator for Combination
"""
design the 'CombinationIterator' class:
- 'CombinationIterator(string characters, int combinationLength)' initialises
the object with a string 'characters' of sorted distinct lowercase english
letters and a number 'combinationLength' as arguments
- 'next()' returns the next combination of length 'combinationLength' in
lexicographical order
- 'hasNext()' returns 'true' iff there exists a next combination
"""
class CombinationIterator(object):
def __init__(self, characters, combinationLength):
"""
:type characters: str
:type combinationLength: int
"""
self.characters = characters
self.n = len(characters)
self.combinations = self.get_comb(self.n, combinationLength)
self.idx = len(self.combinations) - 1
def next(self):
"""
:rtype: str
"""
s = ""
for i in range(self.n):
if self.combinations[self.idx][i] != "0":
s += self.characters[i]
self.idx -= 1
return s
def hasNext(self):
"""
:rtype: bool
"""
return self.idx > -1
def get_comb(self, l, n):
end = int("1" * l, 2)
res = []
for i in range(end + 1):
b = bin(i)[2:]
if b.count("1") == n:
res.append(b.zfill(l))
return res
if __name__ == "__main__":
obj = CombinationIterator("abc", 2)
print(obj.next())
print(obj.hasNext())
print(obj.next())
print(obj.hasNext())
print(obj.next())
print(obj.hasNext())
|