赞
踩
前几天华为的面试官找到我,但是签约不是和华为,是和德科的签约,然后我也去百度了,发现其实就是个外包,他们俗称的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。发现每个数都是它前两个数的相加,因此只要用递归来做就很简单了,也不会有算的中间值超大的情况。
大概两周后,又让我重新考了一次,这次两道题,一道过了,一道百分之八十。就算是机考过了,可是后来又栽在了性格测试上,哈哈,这次栽了就要十八个月内都不能面华为
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。