相同,不論剛做完這個編碼,想法是從@dream_machine
基本上它是一個回溯算法,複雜度爲O(2n!), 需要跟蹤left
知道應該把字符串輸出。
似乎算法太慢,也許需要添加一些備忘錄來加速它。
void helper(int start, string &s, string &path, vector<string> &result, int);
vector<string>
getPossibleCombo(string &s) {
vector<string> result;
string path;
helper(0, s, path, result, s.size());
return result;
}
void helper(int start, string &s, string &path, vector<string> &result, int left) {
if (start == s.size() && left == 0) {
result.push_back(path);
return;
}
for (int i = start; i < s.size(); i++) {
path.push_back('a' + (s[i] - '0') - 1);
helper(i + 1, s, path, result, left - 1);
path.pop_back();
if (i < s.size() - 1 && s[i] > '0' && s[i] <= '2') { // can try two.
if (s[i] == '2' && s[i+1] > '6')
continue;
int c = (s[i] - '0') * 10 + s[i + 1] - '0';
path.push_back('a' + c - 1);
helper(i + 2, s, path, result, left - 2);
path.pop_back();
}
}
}
int main() {
string s("12345");
auto r = getPossibleCombo(s);
for (auto &s : r) {
cout << s << endl;
}
}
輸出
bash-3.2$ g++ -std=c++11 -g test2.cpp && ./a.out
abcde
awde
lcde
你忘了問一個問題。 –
,但得分是2 :) – user1
我不明白'12345'如何映射到'lcde'。你能解釋一下這個系統嗎?也許,在以一種清晰的方式解釋系統時,你不但可以讓其他人告訴你如何做到這一點,還可以啓發你自己。 ;-) –