由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
SanFrancisco版 - 求救, F家onsite算法题
相关主题
包子求助:如何自动生成组合? (转载)loan agent的email被黑客了,担心个人信息
这么热闹, 我也报Google offer (转载)你是否愿意通过自学成为一个软件工程师 ?
问一个espp的问题这样的家庭在湾区如何?
工资表有把ESPP 卖掉交的税算进去了么?问个calorie的问题, 食品标注的是指食品包含的热量, 还是身体吸收的热量 ?
万能的三番版,这个数学回家作业怎么解房子无贷款,但想从房子拿些钱出来
itunes giftcard【闲话房贷】我究竟要工作多久才能贷款? (转载)
这就是传说中让理科生沉默,让文科生落泪的文史综合题 (转载)猜猜这个房子的成交价
干涸的鄱阳湖0.125% 买4785$ closing cost 划算吗?
相关话题的讨论汇总
话题: 组合话题: 算法话题: 打印话题: onsite话题: 100
进入SanFrancisco版参与讨论
1 (共1页)
i*****e
发帖数: 218
1
求救, F家onsite算法题
到F家onsite, 被问了这个题, 我不会, 请大家帮忙吧。
这是一个组合问题的算法题。
给一个自然数集,比如:1, 2, 3, 4, ...., 100.
又任给一个自然数, n, (n是一个变量),举例来说, n = 3,
找出这个自然数集中选出n个数的全部组合, 把它们打印出来。
举例来说, n = 3, 打印出:
1, 2, 3
1, 2, 4,
1, 2, 5
2, 3, 4
2, 3, 5
97, 98, 99
98, 99, 100
我知道总的组合数是: 100!/n!
我不知道怎么把这些组合都打印出来。
(打印的顺序可以自己定, 关键是把这些所有的组合都打印出来.
他们的要求是针对任何一个n < 100, 比如 n = 49, 打印出所有的组合).
多谢大家。
(当时还问了一个问题是, 如果用python 或 javascript 怎么实现它)。
a**********t
发帖数: 631
2
FB还出这么简单的题?这是最基本的combination,随便找本算法书都能找到。最简单
的办法就是用recursion.
n**********5
发帖数: 1707
3
我的算法课没教过这个。我中学时是这样解的:
这是所谓穷举。你这个例子是n位100进制数。
开一个n数字的数组,初始值为最小数(1)。
while (true)
{
判断此组合是否合法,如合法则输出:如1,1,1不合法则不输出
最低位+1
从最低位向最高位循环,如>最大值则此位reset为最低值,高一位+1。如无更高位则程
序结束
}
视合法的条件,+1运算哪里可以优化

【在 i*****e 的大作中提到】
: 求救, F家onsite算法题
: 到F家onsite, 被问了这个题, 我不会, 请大家帮忙吧。
: 这是一个组合问题的算法题。
: 给一个自然数集,比如:1, 2, 3, 4, ...., 100.
: 又任给一个自然数, n, (n是一个变量),举例来说, n = 3,
: 找出这个自然数集中选出n个数的全部组合, 把它们打印出来。
: 举例来说, n = 3, 打印出:
: 1, 2, 3
: 1, 2, 4,
: 1, 2, 5

i*****e
发帖数: 218
4
Thank you.
你的这个算法挺有意思。 但需要判断, 1, 2, 4 和 4, 2, 1; 和 2, 4, 1
是同一个组合, 这个工作量不小吧 ?
另外, 初始值应该设为:1, 2, 3 (举例来说, 对于3 位数)。
> 这是所谓穷举。你这个例子是n位100进制数。
> 开一个n数字的数组,初始值为最小数(1)。
> while (true)
> {
> 判断此组合是否合法,如合法则输出:如1,1,1不合法则不输出
> 最低位+1
> 从最低位向最高位循环,如>最大值则此位reset为最低值,高一位+1。如无更高位则程
> 序结束
> }

【在 n**********5 的大作中提到】
: 我的算法课没教过这个。我中学时是这样解的:
: 这是所谓穷举。你这个例子是n位100进制数。
: 开一个n数字的数组,初始值为最小数(1)。
: while (true)
: {
: 判断此组合是否合法,如合法则输出:如1,1,1不合法则不输出
: 最低位+1
: 从最低位向最高位循环,如>最大值则此位reset为最低值,高一位+1。如无更高位则程
: 序结束
: }

n**********5
发帖数: 1707
5
我没修过你们的算法课。所以我的算法可能看起来很怪。
组合本质上就是计数。不过因为这是一个很大的整数,否则直接+1然后取模也是可以
的。
如果不重复,只要保证数组是降序就行了。这样+1的时候可以优化(直接跳过不可能
的组合)。
这是一切穷举的基础。其它的如任意N个加起来等于M的组合等等。
给你1-100你可以视为下标。问题还可以转变为100个字符求所有可能的组合等等。
有了这个基础,还有其它可能的优化如剪枝(+1的时候直接跳过不可能的组合)。

【在 i*****e 的大作中提到】
: Thank you.
: 你的这个算法挺有意思。 但需要判断, 1, 2, 4 和 4, 2, 1; 和 2, 4, 1
: 是同一个组合, 这个工作量不小吧 ?
: 另外, 初始值应该设为:1, 2, 3 (举例来说, 对于3 位数)。
: > 这是所谓穷举。你这个例子是n位100进制数。
: > 开一个n数字的数组,初始值为最小数(1)。
: > while (true)
: > {
: > 判断此组合是否合法,如合法则输出:如1,1,1不合法则不输出
: > 最低位+1

1 (共1页)
进入SanFrancisco版参与讨论
相关主题
0.125% 买4785$ closing cost 划算吗?万能的三番版,这个数学回家作业怎么解
two maths problem--thank you.itunes giftcard
NBA 2010年新秀们的185磅卧推测试的平均值是11.37,最大值23,这就是传说中让理科生沉默,让文科生落泪的文史综合题 (转载)
SFO 机场停车一小时多少钱?干涸的鄱阳湖
包子求助:如何自动生成组合? (转载)loan agent的email被黑客了,担心个人信息
这么热闹, 我也报Google offer (转载)你是否愿意通过自学成为一个软件工程师 ?
问一个espp的问题这样的家庭在湾区如何?
工资表有把ESPP 卖掉交的税算进去了么?问个calorie的问题, 食品标注的是指食品包含的热量, 还是身体吸收的热量 ?
相关话题的讨论汇总
话题: 组合话题: 算法话题: 打印话题: onsite话题: 100