aboutsummaryrefslogtreecommitdiff
path: root/store/works/solutions/leetcode/cpp/1286.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'store/works/solutions/leetcode/cpp/1286.cpp')
-rw-r--r--store/works/solutions/leetcode/cpp/1286.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/store/works/solutions/leetcode/cpp/1286.cpp b/store/works/solutions/leetcode/cpp/1286.cpp
new file mode 100644
index 0000000..1ad0d4e
--- /dev/null
+++ b/store/works/solutions/leetcode/cpp/1286.cpp
@@ -0,0 +1,56 @@
+#include <string>
+
+using std::string;
+
+#include <vector>
+
+class CombinationIterator {
+public:
+ string chars;
+ int char_length;
+ int combinationLength;
+ bool has_next = true;
+ std::vector<int> indices;
+
+ CombinationIterator(string characters, int combinationLength)
+ : chars(characters), char_length(characters.size()),
+ combinationLength(combinationLength) {
+ for (int i = 0; i < combinationLength; i++) {
+ indices.push_back(i);
+ }
+ }
+
+ string next() {
+ string result;
+ for (auto index : indices) {
+ result.push_back(chars[index]);
+ }
+
+ int count = 1;
+ while (indices[combinationLength - count] == char_length - count) {
+ count++;
+ if (count > combinationLength) {
+ has_next = false;
+ return result;
+ }
+ }
+
+ indices[combinationLength - count] += 1;
+ for (int i = combinationLength - count + 1; i < combinationLength; i++) {
+ indices[i] = indices[i - 1] + 1;
+ }
+
+ return result;
+ }
+
+ bool hasNext() {
+ return has_next;
+ }
+};
+
+/**
+ * Your CombinationIterator object will be instantiated and called as such:
+ * CombinationIterator* obj = new CombinationIterator(characters,
+ * combinationLength); string param_1 = obj->next(); bool param_2 =
+ * obj->hasNext();
+ */ \ No newline at end of file