From 7f39523b6b2bf109fb92041e3c9215a9e31ab6f4 Mon Sep 17 00:00:00 2001 From: crupest Date: Fri, 9 Oct 2020 14:52:08 +0800 Subject: import(solutions): Add problem 1286 . --- works/solutions/cpp/1286.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 works/solutions/cpp/1286.cpp (limited to 'works/solutions/cpp/1286.cpp') diff --git a/works/solutions/cpp/1286.cpp b/works/solutions/cpp/1286.cpp new file mode 100644 index 0000000..1ad0d4e --- /dev/null +++ b/works/solutions/cpp/1286.cpp @@ -0,0 +1,56 @@ +#include + +using std::string; + +#include + +class CombinationIterator { +public: + string chars; + int char_length; + int combinationLength; + bool has_next = true; + std::vector 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 -- cgit v1.2.3