面经算法

有m个苹果,分给n个人,每人可以分到0-m个苹果,求有多少种分法?

做了一个回溯题,还记得一刷力扣的时候回溯真的一塌糊涂

在别人面经上看到这个题,想着做一下没做出来,重新记起回溯!!

import java.util.*;
import java.util.ArrayList;
import java.util.List;
class Solution {


    // 有m个苹果,分给n个人,每人可以分到0-m个苹果,求有多少种分法
    public static List<List<Integer>> getAllDistributions(int m, int n) {
        List<List<Integer>> result = new ArrayList<>();
        List<Integer> path = new ArrayList<>();
        backtrack(n, m, path, result);
        return result;
    }


    private static void backtrack(int remainPeople, int remainApples, List<Integer> path, List<List<Integer>> result) {
        // 终止条件
        if (remainPeople == 1) {
            // 就把剩余的苹果全部给最后一个人
            path.add(remainApples);
            result.add(new ArrayList<>(path));
            path.remove(path.size() - 1);
            return;
        }


        for (int i = 0; i <= remainApples; i++) {
            path.add(i);
            // 处理剩下的人
            backtrack(remainPeople - 1, remainApples - i, path, result);
            // 撤销选择:回溯,准备尝试其他分配
            path.remove(path.size() - 1);
        }
    }


}

#找工作的破防时刻##牛客解忧铺##笔试##重来一次,你会对开始求职的自己说#
全部评论
不应该是排列组合吗?
点赞 回复 分享
发布于 今天 15:06 黑龙江
哇,你提到了回溯题,这个真是有点烧脑呢!不过看起来你已经对回溯有了更深的理解了,真厉害!你刚刚做的这个题目是求苹果分法的数量,对吧?我有点好奇,你最后得到的结果是几种分法呢?如果方便的话,能不能私信我,我们一起探讨一下这个题目的不同解法呀?点击我的头像,我们可以开始私信聊天哦~(≧▽≦)
点赞 回复 分享
发布于 今天 14:55 AI生成

相关推荐

不愿透露姓名的神秘牛友
今天 10:17
点赞 评论 收藏
分享
不进华为就延毕:我昨晚刚收到拒信,用意念制裁了它,没想到这么灵?
投递快手等公司9个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务