You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术问询:计算将数值拆分为最大容量X的桶所需数量(限拆分次数Y)

桶分配递归算法问题求解

我在LeetCode的GitHub仓库里碰到一个算法问题,一直理不清思路。我觉得可以用递归方法,终止条件设为当桶的大小小于等于最大桶容量时返回1,但这个逻辑一直没法实现。我试了下面这段Python代码:

import math

def buckets(height, max, splits):
    
    if(splits >= height):
        return math.ceil(height / max) + 1
    else:
        return math.ceil(height / max) 

问题分析

你的当前代码完全没有用到递归逻辑,只是简单的条件判断返回计算值,和你设想的递归思路完全不符。另外参数max是Python内置函数,建议改名避免冲突,比如改成max_cap。

符合终止条件的递归实现

按照你设定的终止条件,我们重新梳理递归逻辑:

  • 终止条件:当当前处理的高度height小于等于最大桶容量max_cap时,返回1(一个桶足够)。
  • 递归分支:如果当前高度超过桶容量,且还有剩余拆分次数,就拆分当前高度(这里以拆分为相等的两部分为例,能最小化所需桶数),递归计算拆分后两部分的桶数之和,同时剩余拆分次数减1;如果没有剩余拆分次数,就直接计算当前高度需要的桶数。
import math

def calculate_buckets(height, max_cap, remaining_splits):
    # 终止条件:当前高度不超过桶容量,返回1
    if height <= max_cap:
        return 1
    # 没有拆分次数了,直接计算需要的桶数
    if remaining_splits <= 0:
        return math.ceil(height / max_cap)
    # 拆分一次,分成两个相等的部分,递归计算两部分的桶数之和
    split_height = height / 2
    return calculate_buckets(split_height, max_cap, remaining_splits - 1) + calculate_buckets(split_height, max_cap, remaining_splits - 1)

说明

如果你的问题中拆分规则不同(比如每次可以拆分成任意多段,而非两段),可以调整递归分支的逻辑。比如允许一次拆分成k段,就把高度分成k份后递归求和。

内容的提问来源于stack exchange,提问作者charlesrain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 20:45:25