diff options
author | crupest <crupest@outlook.com> | 2020-10-09 14:52:08 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2020-10-09 14:52:08 +0800 |
commit | 7f39523b6b2bf109fb92041e3c9215a9e31ab6f4 (patch) | |
tree | 490d793288706e2ded95e44e307146375e297a22 | |
parent | 5c5a2b2048f230457028a59924858ba80bb9fff8 (diff) | |
download | crupest-7f39523b6b2bf109fb92041e3c9215a9e31ab6f4.tar.gz crupest-7f39523b6b2bf109fb92041e3c9215a9e31ab6f4.tar.bz2 crupest-7f39523b6b2bf109fb92041e3c9215a9e31ab6f4.zip |
import(solutions): Add problem 1286 .
-rw-r--r-- | works/solutions/cpp/1286.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
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 <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 |