这个题目估计类似一些比赛用的题目。
现在先说一个。
说是有篮子,可以装球,篮子有一定的容量。问题是,给定篮子数量,篮子容量,还有小球数,求出有几种装法。(原文是英文的)
这里还有些限制,比如篮子数不会多余5个,小球不多于50个等。
例子:
篮子数 容量 小球数
2 5 2
结果: 3
也就是 (0,2),(2,0),(1,1)这三种组合
2 5 11
结果 0
这说明篮子不够装下那么多小球。
相信大家现在应该知道题意了。那么我们就开始算法吧。
我首相想到,这种排列组合的算法,使用循环来做。
那么,仔细一看,发现,有几个篮子,我们就要做几个大循环。每个循环里面,再通过尝试增加小球数,然后计算是否装满。
实际上就是枚举所有装球情况,然后判断符合要求的。
可是问题来了,写代码的时候要明确循环,比如,几个篮子,就要几个for语句。
这些问题来了。不能这样控制。很快,递归的思想便浮上水面。
我们先考虑n-1个篮子的情况。也就是第0个篮子(从0开始),在容量或者最小值之间循环(取决于容量和所需装小球数量比较得到的最小值)。
然后再计算当前情况是否符合要求。
public void getWays(int baskets,int capacity,int balls){
int bas[] = new int[baskets];
int c = capacity;
int bal = balls;
if(baskets <= 0)return ;
if(balls <= 0) return ;
if(baskets*c < balls) return ;
//减少循环次数
int min = c < bal?c:bal;
for(bas[0]=0; bas[0] <= min;bas[0]++){ //这里比较难理解。注意传入的递归小球数,已经做了删减。
//因为在bas[0]中已经装入了小球,所以下一次算只要减去就好
getWays(baskets-1,capacity,balls-bas[0]);
//计算本次情况
//add函数只是判断当前bas中的数值相加是否等于balls
if(add(bas,balls)){
//这里的r应该作为全局变量。
r++;
}
}
}
public boolean add(int b[],int m){
int sum = 0;
for(int i = 0; i< b.length;i++){
sum += b[i];
}
if(sum == m){
return true;
}
return false;
}
写出代码后,我都吃惊,这个代码还真短。不过我面试的时候,还是做错了。
看来递归真的是很神奇。
分享到:
相关推荐
JavaOOP面试题 Java集合/泛型面试题 Java异常面试题 Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 Java注解面试题 多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 ...
有13个球,其中有一个球的重量不同于其它12个球,请用天平称3次,找个这个球 附件是我用JAVA代码实现
云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备...
面试题总结是一个长期工作,面试不停,这份面试题总结就不会停。以后会慢慢把Java相关的面试题、计算机网络等都加进来,其实这不仅仅是一份面试题,更是一份面试参考,让你熟悉面试题各种提问情况,当然,项目部分,...
最全的j2EE面试题,题量大、经典,是我面试的整理试题 1、java笔试题大集合 2、各个公司面试题 3、J2EE初学者面试题 4、J2EE面试题(打码查错题) 5、java_华为笔试题 6、java常见面试题 7、java程序员面试宝典 8、...
Java是信息技术领域中...总的来说,这个压缩包为Java开发者提供了一个全面的复习资源,涵盖了从基础知识到高级应用的各种面试题,是准备Java面试的宝贵资料。求职者应深入理解和掌握这些知识点,以提高自己的竞争力。
所以面试题数量也是不少的,里面也包含了个人的一些总结和见解,比如说在集合方面的知识点有实现的各自特点,他们之间的区别,以及等等原理和实现的细节,还包含了java和前端的面试宝典,一个宝典大概有500页左右,
2023年最新版--Java+最常见的+200++面试题汇总+答案总结汇总 阿里百度美团面试题合集 大数据面试题 100道 多线程面试59题(含答案) 最新JAVA面试题总结之基础/框架/数据库/JavaWeb/Redis BIO,NIO,AIO,Netty面试题 ...
2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题、Netty面试题、Elasticsearch面试题、Tomcat面试题、Dubbo面试题、Kafka面试题、Linux面试题、2021面试题、java面试...
实用性强:文章中的每一个面试题都是实际面试中常见的问题,对于准备Python面试的读者来说非常有用。 省时省力:读者可以在一个地方找到大量的Python面试题,避免了自己花费大量时间和精力去收集和整理。 适合不同...
【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】...
这个里面是Java的详细理解和详解,里面分为3个不同老师理解的面试题可以,看一下看看自己理解多少。每一个都是不一样的,分为:基础知识、...这个只是一个面试题总结里面的,另外两个也都差不多只是每个有一些差距。
(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题...
面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....
【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题...
18.md 5个典型的JavaScript面试题(上) JavaScript 19.md 再来5个JavaScript面试题 JavaScript 20.md BAT web前端开发方向校招都考些什么? General 21.md Eleme 笔试题 General 22.md 一些JS题目的解答 ...
ERP工程师面试题ERP工程师面试题ERP工程师面试题ERP工程师面试题
面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题...
前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; ...