由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 好记(但不是最优)的combination算法
相关主题
amazon的那道题目Why I can't compile this function successfully
Interview questions, BloombergC++: what is the output? How to interpret it?
一个容易记忆的permutation算法C++ Q42: (C22)
one C++ question问个c++题
C++ object size一问C++问题
One C++ question弱问个C++ 问题 (const_cast)
one C++ question新手问个C++(Thinking in C++ source code)
发个题目给大家复习一下marco新手请教:C++ decrement loop (转载)
相关话题的讨论汇总
话题: start话题: 位置话题: std话题: int
进入JobHunting版参与讨论
1 (共1页)
x*****m
发帖数: 29
1
p.s. 看来之前那个题目说错话了, 就是觉得这个框架挺容易理解记忆的,既不是最优也不是最简单也不是最**最&&的,大
家轻拍..轻拍...
刚刚研究出来的~ 觉得还挺直观挺好记忆的~
Combination(s, start, k) : 从串s的位置start开始选k个元素
从位置1开始,分成选位置1和不选位置1的
然后递归调用,位置2,继续分成选位置2和不选位置2的...依次类推
如果剩下的和k相等,或者k==0了,就选择完毕了可以输出一个combination了
my code:
void Combination(std::string s, int start, int k) {
std::string temp;
int remaining = s.size() - start;

if (remaining == k) {
std::cout << s << std::endl;
return;
}
if (k == 0) {
std::cout << s.erase(start,
m******9
发帖数: 968
2
呵呵,你又开了一帖研究出来啦。 不过你帖子的题目实在太霸气了点把。
我帮你指出一下小问题吧。
第一个就是function signature的问题, 我觉得你应该用指针,而不是string,很多
时候面试官会给出限定的。
还有你依赖了 string::erase(), 这个最好不用。 你这个不是最优化的,至少你要在
你的s中删除字符。
如果你觉得 你这个方法很好的话, 可以再琢磨一下另外一个经典的题目,就是
combination打印手机按键的那个题目。
m******9
发帖数: 968
3
我再贴个另外的写法吧,思路还是沿用你自己的思路,就是每个index 分成选择,或者
不选择。 你可以加上一个辅助数组,用来标记那些index被选择了,哪些没有被选择。
void combination(char* s, int start, bool* c, int n)
{
if(s[start]=='\0'){
print_combination(s, c, n);
return;
}
c[start] = true;
combination(s, start+1,c,n);
c[start] = false;
combination(s, start+1, c,n);
}
void print_combination(char* s, bool* c, int n)
{
for(int i=0; i if(c[i]==true)
cout< }
cout< }
g*****u
发帖数: 298
4
最简单的?莫过于64个元素以内(用long long表示,),从0 loop到 2^64-1, 输出每个
integer的set bits.
x*****m
发帖数: 29
5
题目阿..没有霸气的意思..就是觉得这样更好记忆 效率么确实不是最优的
你的改进方法很不错阿~~ 我再去研究下别的题目去~~

【在 m******9 的大作中提到】
: 呵呵,你又开了一帖研究出来啦。 不过你帖子的题目实在太霸气了点把。
: 我帮你指出一下小问题吧。
: 第一个就是function signature的问题, 我觉得你应该用指针,而不是string,很多
: 时候面试官会给出限定的。
: 还有你依赖了 string::erase(), 这个最好不用。 你这个不是最优化的,至少你要在
: 你的s中删除字符。
: 如果你觉得 你这个方法很好的话, 可以再琢磨一下另外一个经典的题目,就是
: combination打印手机按键的那个题目。

m******9
发帖数: 968
6
哈哈,居然把题目改了,我觉得你原来那个题目很可爱呀
x*****m
发帖数: 29
7
哈 之前就想突出一下这个好记么..结果不小心多打了个最...

【在 m******9 的大作中提到】
: 哈哈,居然把题目改了,我觉得你原来那个题目很可爱呀
1 (共1页)
进入JobHunting版参与讨论
相关主题
新手请教:C++ decrement loop (转载)C++ object size一问
c++ 程序一问One C++ question
Amazon的Fibonacci题one C++ question
c/c++ question发个题目给大家复习一下marco
amazon的那道题目Why I can't compile this function successfully
Interview questions, BloombergC++: what is the output? How to interpret it?
一个容易记忆的permutation算法C++ Q42: (C22)
one C++ question问个c++题
相关话题的讨论汇总
话题: start话题: 位置话题: std话题: int