[Python] MultiPointers solution with short comments
\nclass CombinationIterator:\n\n    def __init__(self, characters: str, combinationLength: int):\n#         multi pointers for each character\n        self.poin
```\nclass CombinationIterator:\n\n    def __init__(self, characters: str, combinationLength: int):\n#         multi pointers for each character\n        self.pointers = [i for i in range(combinationLength)]\n        self.characters = characters\n        self.hasnext = True\n\n    def next(self) -> str:\n        res = \'\'\n        for p in self.pointers:\n            res += self.characters[p]    \n        limit = len(self.characters) - 1\n        for i in reversed(range(len(self.pointers))):\n#             When current pointer can move to the next character\n            if self.pointers[i] < limit:\n                self.pointers[i] += 1\n                self.hasnext = True\n#                 reorder subfix pointers\n                for j in range(i + 1, len(self.pointers)):\n                    self.pointers[j] = self.pointers[j - 1] + 1\n                break\n#             When current pointer cannot move to the next character\n            else:\n#             move current pointer to the next character\n                limit = self.pointers[i] - 1\n                self.hasnext = False\n        return res\n        \n    def hasNext(self) -> bool:\n        return self.hasnext\n\n\n# Your CombinationIterator object will be instantiated and called as such:\n# obj = CombinationIterator(characters, combinationLength)\n# param_1 = obj.next()\n# param_2 = obj.hasNext()\n\n```
[]