头条linux面试题必会题目,头条基础面试题1-9 - osc_pg5rp78i的个人空间 - OSCHINA - 中文开源技术交流社区...

本文讨论了一个经典的背包问题:使用1元、2元和5元硬币组合成n元的不同方式的数量。作者尝试了多种方法,包括递归和记忆化搜索,并分享了在面试场景下解决问题的经验教训。

代码题:1、2、5面值的零钱无限个,凑出n有多少种方案?

看了一眼,完全背包,准备写循环了。写了几行,感觉递归好写,换递归写。写了个有bug的如下,面试官说这样肯定不行,比较紧张,不自信,用了好长时间乱想,没继续改出bug,最后写了个暴力枚举。 1

2

3

4

5

6

7

8

int f(int n,int x)

{

if(n==0)return 1;

if(n<0)return 0;

if(x==1)return f(n-1,1);

if(x==2)return f(n-1,2)+f(n-2,2);

if(x==5)return f(n-1,5)+f(n-2,5)+f(n-5,5);

}

结束后,自己一写如下,明明是对的啊(逻辑思路对,先不写记忆化搜索),才想到面试时写了bug。后序听录音,是跟面试官互动太多,被面试官绕晕了,本来这样写逻辑是正确的,结果写的过程中面试官问x是什么意思,我说是最大用到几,x是5代表可以用125,x为2代表可以用12,x为1代表可以用1,面试官说5的情况包含了1的情况,所以肯定有重复呀,我一想确实是这个理,就没相信自己的做法,之后就越走越偏,迈向凉凉了。 1

2

3

4

5

6

7

8

int f(int n,int x)

{

if(n==0)return 1;

if(n<0)return 0;

if(x==1)return f(n-1,1);

if(x==2)return f(n-1,1)+f(n-2,2);

if(x==5)return f(n-1,1)+f(n-2,2)+f(n-5,5);

}

这道题从前到后花了33min,没搞出来,最后写了个暴力,完蛋。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值