记录一次失败的华为面试

前几天华为的面试官找到我,但是签约不是和华为,是和德科的签约,然后我也去百度了,发现其实就是个外包,他们俗称的OD模式,但是奈何工资高啊,想着去试一下,结果第一面上机敲代码就挂了,惭愧,此次记录一下那道题目。

题目

假如你要上一个有n阶梯的楼梯,每次只能走一阶或者两阶,问有多少种上楼梯的方式。 比如当n=2的时候,有1+1,和2两种方式
当n=3的时候,有1+1+1,1+2,2+1,三种方式

当看到这题的时候,想到的是排列组合的方式,当时的思路是有一堆加起来等于n的1和2的元素,要怎么往坑里面填。假设元素的总数是A,于是想到是如果是不区分1和2的筹码的话,那么每次随机从总数A中取出往坑里填,假设元素1的个数有B个,2的个数有C个,根据排列组合的知识知道一共有的组合方式是:
在这里插入图片描述
因此可以把所有满足和是n的元素1和元素2个数进行组合得到答案。

遇到的坑

上面的算法从数学上解释是完全没问题的,但是因为要算出组合的结果,当算A!的结果时,如果输入n稍微大一点就会溢出了,毕竟长整long也就64位,遭不住这么大的结果,所以我的测试用例也没有百分百,惭愧,当时实在是没想到其他解决办法,一开始就想到组合方式。

解决

其实只要观察n等于1,2,3,4等较小输入的时候我们可以穷举出它的结果依次为:1,2,3,5。发现每个数都是它前两个数的相加,因此只要用递归来做就很简单了,也不会有算的中间值超大的情况。

后续

大概两周后,又让我重新考了一次,这次两道题,一道过了,一道百分之八十。就算是机考过了,可是后来又栽在了性格测试上,哈哈,这次栽了就要十八个月内都不能面华为

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值