From dc1f0c4c0096013799416664894c5194dc7e1f52 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Fri, 28 Feb 2025 23:13:39 +0800 Subject: chore(store): move everything to store. --- store/works/solutions/leetcode/cpp/401.cpp | 57 ++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 store/works/solutions/leetcode/cpp/401.cpp (limited to 'store/works/solutions/leetcode/cpp/401.cpp') diff --git a/store/works/solutions/leetcode/cpp/401.cpp b/store/works/solutions/leetcode/cpp/401.cpp new file mode 100644 index 0000000..71147f4 --- /dev/null +++ b/store/works/solutions/leetcode/cpp/401.cpp @@ -0,0 +1,57 @@ +#include +#include +#include + +using std::string; +using std::vector; + +const std::array hour_digits{1, 2, 4, 8}; +const std::array minute_digits{1, 2, 4, 8, 16, 32}; + +class Solution { +public: + template + void dfs(const std::array &digits, int total_count, int rest_count, + int start_index, int value, std::vector &result) { + + if (value >= max) + return; + + if (rest_count == 0) { + result.push_back(value); + return; + } + + for (int i = start_index; i <= size - rest_count; i++) { + dfs(digits, total_count, rest_count - 1, i + 1, + value + digits[i], result); + } + } + + vector readBinaryWatch(int num) { + vector results; + + for (int i = (num > 6 ? num - 6 : 0); i <= (num > 4 ? 4 : num); i++) { + std::vector hours; + std::vector minutes; + if (i == 0) + hours = {0}; + else + dfs<12>(hour_digits, i, i, 0, 0, hours); + if (i == num) + minutes = {0}; + else + dfs<60>(minute_digits, num - i, num - i, 0, 0, minutes); + + for (auto hour : hours) { + for (auto minute : minutes) { + char buffer[6]; + sprintf(buffer, "%d:%02d", hour, minute); + results.push_back(string(buffer)); + } + } + } + + return results; + } +}; -- cgit v1.2.3