c*********m 发帖数: 43 | 1 1.leetcode的手机键盘给数字,求各种字母组合的题。这题不准用递归,只用迭代该怎
么写啊?
2. 如何将一个大文件拷贝从一台机器拷贝到上千台server? 我觉得这问题是分布式应
用的replication,应该有论文探讨过这个。不知道谁有些好的idea或者知道相关的论
文? | p*****2 发帖数: 21240 | | l*****a 发帖数: 14598 | 3
这题不是循环吗?
【在 c*********m 的大作中提到】 : 1.leetcode的手机键盘给数字,求各种字母组合的题。这题不准用递归,只用迭代该怎 : 么写啊? : 2. 如何将一个大文件拷贝从一台机器拷贝到上千台server? 我觉得这问题是分布式应 : 用的replication,应该有论文探讨过这个。不知道谁有些好的idea或者知道相关的论 : 文?
| c*********m 发帖数: 43 | 4 二爷贴个代码吧,这题没想明白啊,用循环就行啦,谢谢!
【在 p*****2 的大作中提到】 : 第一题应该用stack和queue都可以。
| c*********m 发帖数: 43 | 5 贴个代码瞅瞅?谢啦
【在 l*****a 的大作中提到】 : : 这题不是循环吗?
| p*****2 发帖数: 21240 | 6
1 abc
2 def
3 ghi
比如123
先算第一个,a,b,c
然后算第二个, ad, ae, af, bd, be, bf, ...
然后算第三个
这样就可以都算出来了。
【在 c*********m 的大作中提到】 : 贴个代码瞅瞅?谢啦
| r*******e 发帖数: 7583 | 7 以
1 ABC
2 DEF
3 GHI
为例
string str;
cin >> str;
stack > s;
for (int i = 2; i >= 0; --i) {
s.push(make_pair('A' + (str[0] - '1') * 3 + i, 1));
}
vector > v;
while (!s.empty()) {
char c = s.top().first;
int level = s.top().second;
s.pop();
while (!v.empty() && v.back().second >= level) {
v.pop_back();
}
v.push_back(make_pair(c, level));
if (level == str.size()) {
for (int i = 0; i < str.size(); ++i) {
cout << v[i].first;
}
cout << endl;
} else {
for (int i = 2; i >= 0; --i) {
s.push(make_pair('A' + (str[level] - '1') * 3 + i, level + 1));
}
}
}
【在 c*********m 的大作中提到】 : 贴个代码瞅瞅?谢啦
| b******7 发帖数: 92 | 8 排列问题的简化版,用stack回溯就可以了。
vector permutation(string digits)
{
char keyboard[][5] = { "abc", "def", "ghi", "jkl","mno","pqrs","tuv"
,"wxyz"};
vector st;
for(auto it = digits.begin(); it != digits.end(); ++it)
{
assert(*it >= '2' && *it <= '9');
st.push_back(keyboard[*it - '2']);
}
vector r;
while(true)
{
string temp = digits;
for(int i = 0; i < temp.length(); i++)
temp[i] = * st[i];
r.push_back(temp);
int i = (int)st.size() - 1;
while(i>=0 && *(st[i] + 1) == '\0')
i--;
if(i < 0)
break;
st[i]++;
for(int j = i+1; j < (int)st.size(); j++)
{
st[j] = keyboard[digits[j] - '2'];
}
}
return r;
} |
|