题解 | #放苹果# 很笨但是很直观的递归方法

放苹果

https://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf

//解释看代码
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;


public class Main {
    static List<List<Integer>> allList;
    private static void process(int appleNum, int plateNum, int allocated,
                                List<Integer> list) {
	  //还剩一个盘子没放,而且还有苹果那就全放在这个盘子里
        if (list.size() == plateNum - 1) {
            list.add(appleNum - allocated);
		  //深拷贝,这样对item排序不会影响list,这种以后会经常用的
            List<Integer> item = new ArrayList<>(list);
            item.sort(Comparator.comparingInt(i->i));
            allList.add(item);
            list.remove(list.size() - 1);
            return;
        }
	  //每个盘子循环数量
        for (int i = 0; i <= appleNum - allocated; i++) {
            list.add(i);
            process(appleNum, plateNum, allocated + i, list);
            list.remove(list.size() - 1);
        }
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int appleNum = in.nextInt();
            int plateNum = in.nextInt();
		  allList=new ArrayList<>();
            process(appleNum, plateNum, 0, new ArrayList<>());
		  //去重
            System.out.println(allList.stream().distinct().collect(
                                   Collectors.toList()).size());
        }
    }
}

全部评论

相关推荐

浪子陪都:简历最优秀的地方放到了后面,国奖,校级奖学金这些是最亮眼的。说明你跟同级别的学生不一样。 建议台灯这个,PCB布局布线这个词汇不专业,业内是PCB Layout,第二,单片机的板子一般不用考虑SI,PI 都是低速信号,只要遵循3W原则就好了。 单片机的项目太low了,技能这块,你要看一下BOSS直聘的招聘要求,按照别人的要求写,一些关键词可以增加你简历被检索到的概率。 主修课程不用写,这个没有人去关注的。
点赞 评论 收藏
分享
2024-12-26 13:00
太原理工大学 Java
会飞的猿:简历没啥大问题啊,感觉是缺少了实习经历。多投投先找个中小厂过渡一下吧
点赞 评论 收藏
分享
02-11 17:51
腾讯_TEG_技术
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务